Testando rotas de Chi com variáveis de caminho
No go-chi, testar rotas com variáveis de caminho pode inicialmente representar desafios. No entanto, ao empregar técnicas adequadas, você pode escrever testes confiáveis com eficácia.
O problema decorre do fato de que os valores dos parâmetros do caminho não são preenchidos automaticamente no contexto da solicitação ao usar httptest.NewRequest. Isso exige a adição manual desses parâmetros.
Uma abordagem envolve a criação de um novo contexto de solicitação e a definição manual dos parâmetros de 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))
Como alternativa, é possível usar um http.Handler personalizado que adiciona automaticamente os valores dos parâmetros do caminho:
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)
Lembre-se de usar o manipulador apropriado durante o teste, garantindo que tanto o middleware ArticleCtx quanto o próprio manipulador sejam chamados.
Em resumo, testando rotas com variáveis de caminho no go-chi requer atenção ao preencher o contexto da solicitação com parâmetros de URL apropriados. O emprego dessas técnicas permitirá que você escreva testes precisos e eficazes.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3