Probar rutas de Chi con variables de ruta
En go-chi, probar rutas con variables de ruta puede plantear desafíos inicialmente. Sin embargo, al emplear técnicas adecuadas, puede escribir pruebas confiables de manera efectiva.
El problema surge del hecho de que los valores de los parámetros de ruta no se completan automáticamente en el contexto de la solicitud cuando se usa httptest.NewRequest. Esto requiere la adición manual de estos parámetros.
Un enfoque implica crear un nuevo contexto de solicitud y configurar manualmente los 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, es posible utilizar un http.Handler personalizado que agrega automáticamente los valores de los parámetros de ruta:
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)
Recuerde utilizar el controlador apropiado durante la prueba, asegurándose de que se llame tanto al middleware ArticleCtx como al controlador mismo.
En resumen, probar rutas con variables de ruta en go-chi requiere atención para completar el contexto de la solicitud con parámetros de URL apropiados. El empleo de estas técnicas le permitirá redactar pruebas precisas y efectivas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3