Beim Testen von Chi-Routen, die auf Pfadvariablen basieren, ist es wichtig, den Zugriff auf diese Variablen in Tests nachzuahmen. Anfänglich kann es zu einem Fehler „Nicht verarbeitbare Entität“ kommen, da die Pfadvariable für den Kontext, auf den im Test zugegriffen wird, nicht verfügbar ist.
Um dieses Problem zu beheben, fügen Sie manuell hinzu Pfadparameter zum Anforderungskontext hinzufügen, bevor der zu testende Handler ausgeführt wird. Hier ist ein Beispiel:
<code class="go">package main import ( "context" "fmt" "net/http" "net/http/httptest" "testing" "github.com/go-chi/chi" ) type ctxKey struct { name string } func TestGetArticleID(t *testing.T) { tests := []struct { name string rec *httptest.ResponseRecorder req *http.Request expectedBody string expectedHeader string }{ { name: "OK_1", rec: httptest.NewRecorder(), req: httptest.NewRequest("GET", "/articles/1", nil), expectedBody: `article ID:1`, }, { name: "OK_100", rec: httptest.NewRecorder(), req: httptest.NewRequest("GET", "/articles/100", nil), expectedBody: `article ID:100`, }, { name: "BAD_REQUEST", rec: httptest.NewRecorder(), req: httptest.NewRequest("PUT", "/articles/bad", nil), expectedBody: fmt.Sprintf("%s\n", http.StatusText(http.StatusBadRequest)), }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { // Manually add the path variable to the request context rctx := chi.NewRouteContext() rctx.URLParams.Add("articleID", test.req.URL.Path[len("/articles/"):]) test.req = test.req.WithContext(context.WithValue(test.req.Context(), chi.RouteCtxKey, rctx)) ArticleCtx(http.HandlerFunc(GetArticleID)).ServeHTTP(test.rec, test.req) if test.expectedBody != test.rec.Body.String() { t.Errorf("Got: \t\t%s\n\tExpected: \t%s\n", test.rec.Body.String(), test.expectedBody) } }) } }</code>
Diese Änderung ermöglicht es dem Test, über den Kontext auf die Pfadvariable zuzugreifen, wodurch der Fehler „Unprocessable Entity“ behoben wird.
Das obige ist der detaillierte Inhalt vonWie greife ich für Komponententests auf Pfadvariablen in Chi-Routen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!