Only mock a certain URL
bogdanpetrea opened this issue · comments
Hi,
It's not obvious to me how I can mock only the URLs I want and let the other requests pass.
requestMock := gock.New("test.com")
// Return empty list of tokens
requestMock.Get("/api/v1/users").
Persist().
Reply(200).
JSON(map[string][]string{})
When running the tests I get:
Expected error:
<*url.Error | 0xc000a2d440>: {
Op: "Get",
URL: "http://127.0.0.1:34161/api?timeout=32s",
Err: {
s: "gock: cannot match any request",
},
}
Get http://127.0.0.1:34161/api?timeout=32s: gock: cannot match any request
not to have occurred
I don't want to mock http://127.0.0.1:34161/api?timeout=32s
.
I have tried .EnableNetworking()
, but I don't get the mocked response. I get something like this instead:
{"error": "Get test.com/api/v1/users: unsupported protocol scheme \"\""}
You must add the protocol scheme:
requestMock := gock.New("http://test.com")
// Return empty list of tokens
requestMock.Get("/api/v1/users").
Persist().
Reply(200).
JSON(map[string][]string{})
I don't want to mock http://127.0.0.1:34161/api?timeout=32s.
I have tried.EnableNetworking()
, but I don't get the mocked response. I get something like this instead:
All you need here is enabling the networking mode as you mention.
I didn't mention but I tried both without and with protocol (http
and https
).
EDIT: Oh, I'm not doing the request right...
EDIT2: Yup, that was it. I had to specify the protocol there. Thanks.
Hi,
i would like to reopen this issue because it seems that its still not working as expected..
I'm trying mostly the same. Mocking just a single call. But i'm not able to get it working.
I've prepared a minimal working example what i'm doing
package main
import (
"fmt"
"io/ioutil"
"net/http"
"gopkg.in/h2non/gock.v1"
)
func main() {
gock.EnableNetworking()
gock.New("http://server.com").
Get("/bar").
Persist().
Reply(200).
JSON(map[string]string{"foo": "bar"})
res, err := http.Get("http://server.com/bar")
fmt.Println("Response Info:")
fmt.Println("Error :", err)
body, _ := ioutil.ReadAll(res.Body)
fmt.Println("Status Code:", res.StatusCode)
fmt.Println("Body :\n", string(body))
fmt.Println()
res, err = http.Get("https://httpbin.org/get")
fmt.Println("Response Info:")
fmt.Println("Error :", err)
body, _ = ioutil.ReadAll(res.Body)
fmt.Println("Status Code:", res.StatusCode)
fmt.Println("Body :\n", string(body))
fmt.Println()
}
As you can see i'm trying to mock the call against "server.com" and want to enableNetworking for everything else.
But with the example above the mock for server.com is not working.. there is still networking enabled for this call.
If a remove the enableNetworking above i get the mock working but the call to httpbin is not working..
Maybe i have missed something but i cant find the issue.
Thanks for your help
eloo