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?
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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.