英文:
Check if the header has been assigned to the request in Go unit-testing
问题
我正在尝试测试以下代码行:
httpReq.Header.Set("Content-Type", "application/json")
我以这种方式模拟对外部 API 的请求:
httpmock.RegisterResponder(http.MethodPost, "do-not-exist.com",
httpmock.NewStringResponder(http.StatusOK, `{
"data":{"Random": "Stuff"}}`),
)
我想测试一下是否请求到 API 的头部是否包含我分配的头部。有没有办法可以实现这个?
英文:
I am trying to test the following line of code:
httpReq.Header.Set("Content-Type", "application/json")
I am mocking the request to an external api in this way:
httpmock.RegisterResponder(http.MethodPost, "do-not-exist.com",
httpmock.NewStringResponder(http.StatusOK, `{
"data":{"Random": "Stuff"}}`),
)
And want to test if the request to the api has the header that I assigned. Is there a way I could achieve this?
答案1
得分: 2
通过@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
。
英文:
With the help of the comment by @Kelsnare I was able to solve this issue in the following way:
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},
)
I wrote my own func
of http.Responder
type and used httpmock.NewStringResponder
inside that func
.
答案2
得分: 0
response_test.go
展示了如何测试头部信息:
response, err := NewJsonResponse(200, test.body)
if err != nil {
t.Errorf("#%d NewJsonResponse 失败: %s", i, err)
continue
}
if response.StatusCode != 200 {
t.Errorf("#%d 响应状态不匹配: %d ≠ 200", i, response.StatusCode)
continue
}
if response.Header.Get("Content-Type") != "application/json" {
t.Errorf("#%d 响应 Content-Type 不匹配: %s ≠ application/json",
i, response.Header.Get("Content-Type"))
continue
}
你可以在这里看到一个使用httpmock.RegisterResponder
的表驱动测试的示例。
英文:
response_test.go
illustrates how the header is tested:
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
You can see an example of table-driven test with httpmock.RegisterResponder
here.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论