【发布时间】:2017-12-29 17:17:31
【问题描述】:
我尝试测试我的 http 处理程序是否在正文中返回正确的值。
这是我的处理函数
func Index(w http.ResponseWriter, r *http.Request){
message := `{"status": "OK"}`
w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
if err := json.NewEncoder(w).Encode(message); err != nil {
panic(err)
}
}
这是我的测试
func TestIndex(t *testing.T){
req, err := http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
handler := http.HandlerFunc(Index)
handler.ServeHTTP(rr, req)
expected := `"{"status": "OK"}"`
if rr.Body.String() != expected {
t.Errorf("handler returned unexpected body: got %v want %v",
rr.Body.String(), expected)
}
}
测试结果是:
handlers_test.go:244: handler returned unexpected body: got "{\"status\": \"OK\"}"
want {"status": "OK"}
我认为 " 的转义是因为 json 编码,但即使我将预期更改为
expected := `"{\"status\": \"OK\"}"`
它不起作用,比测试的结果是
handlers_test.go:244: handler returned unexpected body: got "{\"status\": \"OK\"}"
want "{\"status\": \"OK\"}"
在docs 中,我发现了一些 json 编码附加换行符的内容,但即使使用该信息,我也无法让测试正常工作:-/
提前感谢您的帮助。
【问题讨论】:
-
expected := `"{"status": "OK"}`这在 { 之前有一个额外的 "。这可能是个问题吗? -
@Shinratensei:感谢您的提示。编辑了sn-p,但没有解决问题:(
-
是的,我知道,这对我来说看起来很奇怪。看答案,他们更了解golang
标签: json string http testing go