使用路径变量测试 Chi 路由
在 go-chi 中,使用路径变量测试路由最初可能会带来挑战。但是,通过采用适当的技术,您可以有效地编写可靠的测试。
问题源于以下事实:使用 httptest.NewRequest 时,路径参数值不会自动填充到请求上下文中。这就需要手动添加这些参数。
一种方法涉及创建新的请求上下文并手动设置 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))
或者,可以使用自动添加路径参数值的自定义 http.Handler:
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)
记住在测试过程中使用适当的处理程序,确保 ArticleCtx 中间件和处理程序本身都被调用。
总之,使用路径变量测试路由在 go-chi 中需要注意使用适当的 URL 参数填充请求上下文。采用这些技术将使您能够编写准确且有效的测试。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3