Use httpexpect to test server
source link: https://dannypsnl.github.io/blog/2018/09/16/cs/httpexpect-go/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Use httpexpect to test server
Use builtin functionality to test a Go server is a panicful experience. The problem is because we have to handle too many error and get so much thing we aren't always need.
Of course, we will create a abstraction to reduce this panic. But if we already have a mature solution? That is httpexpect
We have two options about import:
import "github.com/gavv/httpexpect.v1"
import "github.com/gavv/httpexpect"
The different is v1
is stable branch, another is master
branch on github.
I suggest pick stable one for company project, but it's fine to use master
branch at side project.
httpexpect
works pretty good with httptest
. A simple example:
type fakeHandler struct {
}
func (h *fakeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello")
}
func TestIt(t *testing.T) {
handler := &fakeHandler{}
server := httptest.NewServer(handler)
defer server.Close()
e := httpexpect.New(t, server.URL)
e.GET("/").
Expect().
Status(http.StatusOK).
Body().Equal("Hello")
}
How about add form value?
e.PATCH("/test/patch").WithFormField("value", "patch").
Expect().Status(http.StatusOK).
Body().Equal("patch")
JSON response?
e.POST("/post").
Expect().Status(http.StatusOK).
ContentType("application/json", "").
JSON().Equal(expected)
Query?
e.GET("/user").WithQuery("name", "Danny").
Expect().Status(http.StatusOK).
Hope you would feel happy with this little introduction.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK