경로 변수를 사용하여 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