yikegaya’s blog

仕事関連(Webエンジニア)と資産運用について書いてます

Ginのエラーでハマったので対応メモ。[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 200 with 401

GoのHTTPフレームワークGinで実装したAPIのテストコードを書いていたら401を返すはずのテストケースで200が返ってしまい対応で軽くハマりました。

以下のメッセージが原因っぽかったけどなぜ出てくるのかしばらく分からず。

[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 200 with 401

原因

テストコードでginのmiddlewareをmockしてそこで200を返してしまっていたのが原因っぽい。

こんな感じ

ctrl := gomock.NewController(t)  
mockMiddleware := mockMiddleware.NewMockMiddlewareInterface(ctrl)
mockMiddleware.
    EXPECT().
    DemoAuthorization().
    Return(func(c *gin.Context) {
      // ここが原因
        c.String(http.StatusOK, "Mocked DemoAuthorization")
    }).
    AnyTimes()
ctrl := gomock.NewController(t) 
mockMiddleware := mockMiddleware.NewMockMiddlewareInterface(ctrl)
mockMiddleware.
    EXPECT().
    DemoAuthorization().
    Return(func(c *gin.Context) {
      // 単純に消したら問題なくテスト通った
    }).
    AnyTimes()