Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var (
ErrNilResponse = errors.New("response cannot be nil")
)
Functions ¶
This section is empty.
Types ¶
type Caller ¶
Caller type for call(s) http testing with a http.Client without execute on the network call You need set the ExpectedRequest field. This fields should be asserted to have equal values: - Body - ContentLength - Form - Header - Method - URL - context.Context
type HTTPClient ¶
type HTTPClient interface { // Client returns a http.Client Client() *http.Client // AddCall adds a Caller to the list of callers // The callers list is ordered, so the first caller added will be the first to be executed // By default, if the caller does not have a response or error set, // a default response will be returned. // The default response return a 200 OK with a empty body // and a Content-Type header set to application/json. AddCall(call Caller) // SetDefaultResponse sets a default response to be returned by the http.Client // If no response or error are set. SetDefaultResponse(response *http.Response) error // RoundTrip method to implement http.RoundTripper interface RoundTrip(req *http.Request) (*http.Response, error) // ExpectedCalls asserts that all calls were executed // You need to call this method at the end of your test to ensure that all calls were executed ExpectedCalls() }
HTTPClient type for call(s) http testing with a http.Client without execute on the network call It is useful to test a code that makes http calls
func NewHTTPClient ¶
func NewHTTPClient(t *testing.T) HTTPClient
Example ¶
package main import ( "context" "errors" "fmt" "net/http" "testing" "github.com/gofast-pkg/http/testify" "github.com/stretchr/testify/assert" ) const ( urlTestRequest1 = "http://example.com/request_1" urlTestRequest2 = "http://example.com/request_2" ) // testedCode simulates a code that makes two http requests func testedCode(ctx context.Context, c *http.Client) error { var err error var r1 *http.Request var r2 *http.Request var resp1 *http.Response var resp2 *http.Response if r1, err = http.NewRequestWithContext(ctx, http.MethodGet, urlTestRequest1, nil); err != nil { return err } if r2, err = http.NewRequestWithContext(ctx, http.MethodGet, urlTestRequest2, nil); err != nil { return err } if resp1, err = c.Do(r1); err != nil { return err } defer resp1.Body.Close() if resp1.StatusCode != http.StatusOK { return errors.New("unexpected status code") } if resp2, err = c.Do(r2); err != nil { return err } defer resp2.Body.Close() if resp2.StatusCode != http.StatusCreated { return errors.New("unexpected status code") } return nil } func main() { var err error var expectedR1 *http.Request var expectedR2 *http.Request t := new(testing.T) client := testify.NewHTTPClient(t) ctx := context.Background() if expectedR1, err = http.NewRequestWithContext( ctx, http.MethodGet, urlTestRequest1, nil); err != nil { t.Fatal(err) } if expectedR2, err = http.NewRequestWithContext( ctx, http.MethodGet, urlTestRequest2, nil); err != nil { t.Fatal(err) } client.AddCall(testify.Caller{ ExpectedRequest: expectedR1, }) client.AddCall(testify.Caller{ ExpectedRequest: expectedR2, Response: &http.Response{ StatusCode: http.StatusCreated, }, }) err = testedCode(ctx, client.Client()) if assert.NoError(t, err) { fmt.Println("no error") client.ExpectedCalls() } }
Output: no error
Click to show internal directories.
Click to hide internal directories.