>  기사  >  백엔드 개발  >  경로 변수를 사용하여 Go-Chi 경로를 테스트하는 방법은 무엇입니까?

경로 변수를 사용하여 Go-Chi 경로를 테스트하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-27 12:14:30278검색

How to Test Go-Chi Routes with Path Variables?

경로 변수를 사용하여 Chi 경로 테스트

go-chi에서 경로 변수를 사용하여 경로를 테스트하는 것은 처음에는 문제가 될 수 있습니다. 그러나 적절한 기술을 사용하면 신뢰할 수 있는 테스트를 효과적으로 작성할 수 있습니다.

문제는 httptest.NewRequest를 사용할 때 경로 매개변수 값이 요청 컨텍스트에 자동으로 채워지지 않는다는 사실에서 비롯됩니다. 이를 위해서는 이러한 매개변수를 수동으로 추가해야 합니다.

한 가지 접근 방식은 새 요청 컨텍스트를 생성하고 URL 매개변수를 수동으로 설정하는 것입니다.

<code class="go">// 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))</code>

또는 다음과 같은 사용자 정의 http.Handler를 사용할 수도 있습니다. 자동으로 경로 매개변수 값을 추가합니다.

<code class="go">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)
}</code>
<code class="go">// Middleware usage in test
handler := URLParamHandler{Next: ArticleCtx(GetArticleID)}
handler.ServeHTTP(rec, req)</code>

ArticleCtx 미들웨어와 핸들러 자체가 모두 호출되도록 테스트하는 동안 적절한 핸들러를 사용해야 한다는 점을 기억하세요.

요약하자면, go-chi에서 경로 변수를 사용하여 경로를 테스트하려면 적절한 URL 매개변수로 요청 컨텍스트를 채우는 데 주의가 필요합니다. 이러한 기술을 사용하면 정확하고 효과적인 테스트를 작성할 수 있습니다.

위 내용은 경로 변수를 사용하여 Go-Chi 경로를 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.