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

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

Susan Sarandon
Susan Sarandon원래의
2024-10-30 11:48:02303검색

How to Test Go-Chi Routes with Path Variables Using httptest.NewRouteContext?

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

경로 변수를 사용하여 Go-Chi 경로를 테스트할 때 경로 변수 값 누락과 관련된 오류가 발생할 수 있습니다. . 이는 httptest.NewRequest를 사용할 때 경로 변수가 요청 컨텍스트에 자동으로 추가되지 않기 때문에 발생할 수 있습니다.

이 문제를 해결하려면 httptest.NewRouteContext 함수를 사용하여 요청 컨텍스트에 경로 변수를 수동으로 추가하세요. 예는 다음과 같습니다.

<code class="go">func TestGetArticleID(t *testing.T) {
    tests := []struct {
        name           string
        rec            *httptest.ResponseRecorder
        req            *http.Request
        expectedBody   string
        expectedHeader string
    }{
        {
            name:         "OK_1",
            rec:          httptest.NewRecorder(),
            req:          httptest.NewRequest("GET", "/articles/1", nil),
            expectedBody: `article ID:1`,
        },
        {
            name:         "OK_100",
            rec:          httptest.NewRecorder(),
            req:          httptest.NewRequest("GET", "/articles/100", nil),
            expectedBody: `article ID:100`,
        },
        {
            name:         "BAD_REQUEST",
            rec:          httptest.NewRecorder(),
            req:          httptest.NewRequest("PUT", "/articles/bad", nil),
            expectedBody: fmt.Sprintf("%s\n", http.StatusText(http.StatusBadRequest)),
        },
    }

    for _, test := range tests {
        t.Run(test.name, func(t *testing.T) {
            // Add path variables to the request context
            rctx := chi.NewRouteContext()
            rctx.URLParams.Add("articleID", "1")
            test.req = test.req.WithContext(context.WithValue(test.req.Context(), chi.RouteCtxKey, rctx))

            ArticleCtx(http.HandlerFunc(GetArticleID)).ServeHTTP(test.rec, test.req)

            if test.expectedBody != test.rec.Body.String() {
                t.Errorf("Got: \t\t%s\n\tExpected: \t%s\n", test.rec.Body.String(), test.expectedBody)
            }
        })
    }
}</code>

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

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