ホームページ  >  記事  >  バックエンド開発  >  パス変数を使用して Go-Chi ルートをテストするにはどうすればよいですか?

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

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 12:14:30278ブラウズ

How to Test Go-Chi Routes with Path Variables?

パス変数を使用した 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。