README
¶
httpspec
httpspec allow you to create HTTP API specifications with ease.
Documentation
The documentation maintained in GoDoc, including the examples.
Usage
package mypkg
func TestMyHandlerCreate(t *testing.T) {
s := testcase.NewSpec(t)
// subject
httpspec.SubjectLet(s, func(t *testcase.T) http.Handler {
return MyHandler{}
})
// Arrange
httpspec.ContentTypeIsJSON(s)
httpspec.Method.LetValue(s, http.MethodPost)
httpspec.Path.LetValue(s, `/`)
httpspec.Body.Let(s, func(t *testcase.T) interface{} {
// this will end up as {"foo":"bar"} in the request body
return map[string]string{"foo": "bar"}
})
s.Then(`it will...`, func(t *testcase.T) {
// Act
rr := httpspec.SubjectGet(t)
// Assert
assert.Must(t).Equal( http.StatusOK, rr.Code)
var resp CreateResponse
assert.Must(t).Nil( json.Unmarshal(rr.Body.Bytes(), &resp))
// ...
})
}
Documentation
¶
Overview ¶
Example (Usage) ¶
Output:
Example (UsageWithDotImport) ¶
Output:
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // Handler prepares the current testcase spec scope to be ready for http handler testing. // You define your spec subject with this and all the request will be pointed towards this. Handler = testcase.Var[http.Handler]{ID: `httpspec:Handler`} // Context allow to retrieve the current test scope's request context. Context = testcase.Var[context.Context]{ID: `httpspec:Context`, Init: func(t *testcase.T) context.Context { return context.Background() }} Method = testcase.Var[string]{ID: `httpspec:Method`, Init: func(t *testcase.T) string { return http.MethodGet }} Path = testcase.Var[string]{ID: `httpspec:Path`, Init: func(t *testcase.T) string { return `/` }} Body = testcase.Var[any]{ID: `httpspec:Body`, Init: func(t *testcase.T) any { return &bytes.Buffer{} }} // Query allows you to retrieve the current test scope's http PathGet query that will be used for ServeHTTP. // In a Before Block you can access the query and then specify the values in it. Query = testcase.Var[url.Values]{ID: `httpspec:QueryGet`, Init: func(t *testcase.T) url.Values { return url.Values{} }} // Header allows you to set the current test scope's http PathGet for ServeHTTP. Header = testcase.Var[http.Header]{ID: `httpspec:Header.Get`, Init: func(t *testcase.T) http.Header { return http.Header{} }} )
Functions ¶
func ContentTypeIsJSON ¶ added in v0.13.0
Example ¶
Output:
func ServeHTTP ¶
func ServeHTTP(t *testcase.T) *httptest.ResponseRecorder
ServeHTTP will make a request to the spec context it requires the following spec variables
- MethodGet -> http MethodGet <string>
- PathGet -> http PathGet <string>
- query -> http query string <url.Values>
- body -> http payload <io.Reader|io.ReadCloser>
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.