テストでモックアウトしたい外部 API を呼び出す関数があります。
func ApiWrapper(...) (...) {
client := resty.New()
var r apiResponse
apiPath := "..." // In the test will be http://localhost:{PORT}/path/to/endpoint
_, e := client.R().SetResult(&r).Get(apiPath)
...
return ...
}
テストは次のようになります。
func TestApiWrapper(t *testing.T) {
client := resty.New()
httpmock.ActivateNonDefault(client.GetClient())
defer httpmock.DeactivateAndReset()
mock_resp = `...`
responder := httpmock.NewStringResponder(200, mock_resp)
api_url := "same string used in the function"
httpmock.RegisterResponder("GET", api_url, responder)
res, e := ApiWrapper(...)
...
}
私が抱えている問題は、モックが使用されておらず、外部 API が CI で使用できないことです。
テストでは、クライアントには次のものがあります。
httpClient: *net/http.Client {
Transport: net/http.RoundTripper(*github.com/jarcoal/httpmock.MockTransport)
クライアントが持っている機能では:
httpClient: *net/http.Client {
Transport: net/http.RoundTripper(*net/http.Transport)