パス変数を使用した Chi ルートのテスト
go-chi では、パス変数を使用したルートのテストで最初に問題が発生する可能性があります。ただし、適切な手法を採用することで、信頼性の高いテストを効果的に作成できます。
この問題は、httptest.NewRequest を使用するときに、リクエスト コンテキストにパス パラメーターの値が自動的に設定されないという事実に起因します。これには、これらのパラメータを手動で追加する必要があります。
1 つの方法では、新しいリクエスト コンテキストを作成し、URL パラメータを手動で設定します。
<code class="go">// 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))</code>
または、カスタム http.Handler を使用することもできます。パス パラメーターの値が自動的に追加されます:
<code class="go">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) }</code>
<code class="go">// Middleware usage in test handler := URLParamHandler{Next: ArticleCtx(GetArticleID)} handler.ServeHTTP(rec, req)</code>
テスト中は忘れずに適切なハンドラーを使用し、ArticleCtx ミドルウェアとハンドラー自体の両方が確実に呼び出されるようにしてください。
要約すると、 go-chi でパス変数を使用してルートをテストするには、リクエスト コンテキストに適切な URL パラメーターを設定することに注意する必要があります。これらのテクニックを採用すると、正確で効果的なテストを作成できるようになります。
以上がパス変数を使用して Go-Chi ルートをテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。