当我使用 curl 测试我的 /health/ 端点时,一切都按预期工作: curl localhost:8080/health/my_id返回my_id.
但是当我运行我的测试时,处理程序无法从参数中提取 ID。我应该如何从测试中制作我的查询来实现这一点?
健康测试
12 func TestHealth(t *testing.T) {
13
14 // Initialize a new httptest.ResponseRecorder.
15 rr := httptest.NewRecorder()
16
17 // Initialize a new dummy http.Request.
18 r, err := http.NewRequest(http.MethodGet, "/health/my_id", nil)
19 if err != nil {
20 t.Fatal(err)
21 }
22
23 // Call the handler function, passing in the
24 // httptest.ResponseRecorder and http.Request.
25 handler.HandleHealth(rr, r)
26
27 // Call the Result() method on the http.ResponseRecorder to get the
28 // http.Response generated by the handler.
29 rs := rr.Result()
30
31 // We can then examine the http.Response to check that the status code // written by the handler was 200.
32 if rs.StatusCode != http.StatusOK {
33 t.Errorf("want %d; got %d", http.StatusOK, rs.StatusCode)
34 }
35
36 // And we can check that the response body written by the handler
37 defer rs.Body.Close()
38 body, err := ioutil.ReadAll(rs.Body)
39 if err != nil {
40 t.Fatal(err)
41 }
42
43 want := "my_id"
44 got := string(body)
45 if got != want {
46 t.Errorf("want body to equal %q. Got: %q", want, got)
47 }
48 }
运行该测试会导致:
internal/handler/health/handler_test.go|46| want body to equal "my_id". Got: ""
健康处理程序
23 func (h *Handler) HandleHealth(w http.ResponseWriter, r *http.Request) {
24 id := chi.URLParam(r, "id")
25 log.Println("ID: ", id)
26 render.PlainText(w, r, id)
27 }
28
29 func RegisterRoutes(router *chi.Mux, handler *Handler) {
30 router.Get("/health/{id}", handler.HandleHealth)
31 }
心有法竹
慕后森
随时随地看视频慕课网APP
相关分类