首页 > 后端开发 > Golang > 正文

如何使用 httptest.NewRouteContext 测试带有路径变量的 Go-Chi 路由?

Susan Sarandon
发布: 2024-10-30 11:48:02
原创
306 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!