Тестирование маршрутов ци с переменными пути
В го-чи тестирование маршрутов с переменными пути может поначалу создавать проблемы. Однако, используя правильные методы, вы можете эффективно писать надежные тесты.
Проблема связана с тем, что значения параметров пути не заполняются автоматически в контексте запроса при использовании 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