"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 경로 변수를 사용하여 Go-Chi 경로를 테스트하는 방법은 무엇입니까?

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

2024-11-02에 게시됨
검색:432

How to Test Go-Chi Routes with Path Variables?

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