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.

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

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog