Test des itinéraires Chi avec des variables de chemin
En go-chi, tester des itinéraires avec des variables de chemin peut initialement poser des défis. Cependant, en employant des techniques appropriées, vous pouvez écrire efficacement des tests fiables.
Le problème vient du fait que les valeurs des paramètres de chemin ne sont pas automatiquement renseignées dans le contexte de la requête lors de l'utilisation de httptest.NewRequest. Cela nécessite l'ajout manuel de ces paramètres.
Une approche consiste à créer un nouveau contexte de requête et à définir manuellement les paramètres d'URL :
// 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))
Alternativement, il est possible d'utiliser un http.Handler personnalisé qui ajoute automatiquement les valeurs des paramètres de chemin :
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)
}
// Middleware usage in test
handler := URLParamHandler{Next: ArticleCtx(GetArticleID)}
handler.ServeHTTP(rec, req)
N'oubliez pas d'utiliser le gestionnaire approprié pendant les tests, en vous assurant que le middleware ArticleCtx et le gestionnaire lui-même sont appelés.
En résumé, tester les routes avec des variables de chemin dans go-chi, il faut veiller à remplir le contexte de la demande avec les paramètres d'URL appropriés. L'utilisation de ces techniques vous permettra de rédiger des tests précis et efficaces.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3