登录
首页 >  Golang >  Go问答

确认请求是否在 Go 单元测试中被正确分配标头

来源:stackoverflow

时间:2024-02-13 10:03:24 318浏览 收藏

一分耕耘,一分收获!既然都打开这篇《确认请求是否在 Go 单元测试中被正确分配标头》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我正在尝试测试以下代码行:

httpreq.header.set("content-type", "application/json")

我以这种方式模拟对外部 api 的请求:

httpmock.RegisterResponder(http.MethodPost, "do-not-exist.com",
        httpmock.NewStringResponder(http.StatusOK, `{
            "data":{"Random": "Stuff"}}`),
    )

并且想要测试对 api 的请求是否具有我分配的标头。有什么办法可以实现这个目标吗?


正确答案


在@kelsnare评论的帮助下,我能够通过以下方式解决这个问题:

httpmock.registerresponder(http.methodpost, "do-not-exist.com",
            func(req *http.request) (*http.response, error) {
                require.equal(t, req.header.get("content-type"), "application/json")
                resp, _ := httpmock.newstringresponder(http.statusok, `{
            "data":{"random": "stuff"}}`)(req)
                return resp, nil},
        )

我编写了自己的 http.responder 类型的 func,并在该 func 中使用了 httpmock.newstringresponder

response_test.go 说明了如何测试标头:

        response, err := NewJsonResponse(200, test.body)
        if err != nil {
            t.Errorf("#%d NewJsonResponse failed: %s", i, err)
            continue
        }

        if response.StatusCode != 200 {
            t.Errorf("#%d response status mismatch: %d ≠ 200", i, response.StatusCode)
            continue
        }

        if response.Header.Get("Content-Type") != "application/json" {
            t.Errorf("#%d response Content-Type mismatch: %s ≠ application/json",
                i, response.Header.Get("Content-Type"))
            continue

您可以查看 table-driven test with httpmock.RegisterResponder here 的示例。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《确认请求是否在 Go 单元测试中被正确分配标头》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>