「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > パス変数を使用して Go-Chi ルートをテストするにはどうすればよいですか?

パス変数を使用して Go-Chi ルートをテストするにはどうすればよいですか?

2024 年 11 月 2 日に公開
ブラウズ:705

How to Test Go-Chi Routes with Path Variables?

パス変数を使用した Chi ルートのテスト

go-chi では、パス変数を使用したルートのテストで最初に問題が発生する可能性があります。ただし、適切な手法を採用することで、信頼性の高いテストを効果的に作成できます。

この問題は、httptest.NewRequest を使用するときに、リクエスト コンテキストにパス パラメーターの値が自動的に設定されないという事実に起因します。これには、これらのパラメータを手動で追加する必要があります。

1 つの方法には、新しいリクエスト コンテキストを作成し、URL パラメータを手動で設定することが含まれます。

// Request & new request context creation
req := httptest.NewRequest("GET", "/articles/123", nil)
reqCtx := chi.NewRouteContext()
reqCtx.URLParams.Add("articleID", "123")

// Setting custom request context with Route Context Key
rctxKey := chi.RouteCtxKey
req = req.WithContext(context.WithValue(req.Context(), rctxKey, reqCtx))

または、パス パラメーター値を自動的に追加するカスタム http.Handler を使用することもできます。

type URLParamHandler struct {
    Next http.Handler
}

func (h URLParamHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    rctx := chi.NewRouteContext()
    for key, val := range r.URL.Query() {
        rctx.URLParams.Add(key, val[0])
    }

    r = r.WithContext(context.WithValue(r.Context(), chi.RouteCtxKey, rctx))
    h.Next.ServeHTTP(w, r)
}
// Middleware usage in test
handler := URLParamHandler{Next: ArticleCtx(GetArticleID)}
handler.ServeHTTP(rec, req)

テスト中は必ず適切なハンドラーを使用し、ArticleCtx ミドルウェアとハ​​ンドラー自体の両方が確実に呼び出されるようにしてください。

要約すると、パス変数を使用したルートのテストです。 go-chi では、リクエスト コンテキストに適切な URL パラメータを設定することに注意する必要があります。これらのテクニックを採用すると、正確で効果的なテストを作成できるようになります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3