Lors du test des routes Chi qui reposent sur des variables de chemin, il est crucial d'imiter l'accès à ces variables dans les tests. Initialement, vous pouvez rencontrer une erreur « Entité non traitable » car la variable de chemin n'est pas disponible pour le contexte accédé dans le test.
Pour résoudre ce problème, ajoutez manuellement le paramètres de chemin vers le contexte de la requête avant d’exécuter le gestionnaire testé. Voici un exemple :
<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>
Cette modification permet au test d'accéder à la variable de chemin via le contexte, résolvant ainsi l'erreur "Entité non traitable".
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!