dousao8152 2019-06-18 09:32
浏览 188
已采纳

使用github.com/jarcoal/httpmock验证请求正文

The function I am trying to test accepts data structs, forms a query_dsl and then makes a /_search call to elastic search with the formed query. Hence I want to assert on the query_dsl and url which gets formed.

I am using github.com/jarcoal/httpmock to mock net/http requests in my unit tests. As per the doc it exposes func GetCallCountInfo() map[string]int to validate how many times a particular endpoint was hit. But I am also interested in knowing what was the request body when this call was made.

http.Client is not exposed, hence can not override/mock that for testing.

If it is not possible using this package then is there any other library which can mock the network request and also gives hold of request body?

  • 写回答

1条回答 默认 最新

  • dsmlf1207915 2019-06-19 03:26
    关注

    Following @georgeok Suggestion, We can create a mock http server and capture the request body when request is made. Following is the code snippet to create a server and store the request body.

    server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
            actualRequestBody, err = ioutil.ReadAll(req.Body)
            check(err)
            // Send mock response to be tested
            _, err := rw.Write(bytes)
            check(err)
        }))
    
        defer server.Close()
    

    Now our request body is stored on actualRequestBody variable, and we can assert on this for correctness.

    The only thing necessary to make sure this works is to make the call at host server.URL. As it spins up a server on the address mentioned at server.URL. So if the call from your code is being made to different server this will not catch it.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 matlab ode45 未发现警告,但是运行出错
  • ¥15 vscode platformio
  • ¥15 代写uni代码,app唤醒
  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开