パス変数を使用した Chi ルートのテスト: トラブルシューティングと解決策
go-chi では、ルート内のパス変数へのアクセスは、次のようなミドルウェア関数によって容易になります。記事Ctx。このようなルートをテストするときは、HTTP リクエストのコンテキストでパス変数を手動で設定することが重要です。これは、コンテキストが httptest パッケージによって自動的に設定されないためです。
問題:
パス変数を利用するルートをテストするには、httptest.NewRequest を使用してテスト リクエストが作成されます。ただし、テスト中に ArticleCtx ミドルウェアを実行すると、パス変数コンテキストが使用できないことを示す HTTP エラー (処理できないエンティティ) が返されます。
解決策:
解決策は手動で行うことです。ハンドラーに渡す前にリクエスト コンテキストにパス パラメーターを追加します:
<code class="go">// Create a context with the path variable req := httptest.NewRequest("GET", "/articles/1", nil) rctx := chi.NewRouteContext() rctx.URLParams.Add("articleID", "1") // Set the RouteCtx in the request context req = req.WithContext(context.WithValue(req.Context(), chi.RouteCtxKey, rctx)) // Execute the handler with the modified request rec := httptest.NewRecorder() ArticleCtx(http.HandlerFunc(GetArticleID)).ServeHTTP(rec, req)</code>
パス変数をリクエストのコンテキストに追加することにより、ArticleCtx ミドルウェアは記事 ID を正しく取得でき、処理できないエンティティ エラーを解決します。
追加のベスト プラクティス:
以上がパス変数を使用して Go-Chi ルートをテストする方法: 処理できないエンティティ エラーを解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。