我正在尝试测试Go echo的路由处理程序。
代码如下:
p := NewPoint(s.db)
// Update the deduction and exchange rate.
e := echo.New()
mapD := map[string]string{"exchange_cash": "5", "exchange_point": "7"}
mapB, _ := json.Marshal(mapD)
req := httptest.NewRequest(echo.POST, "http://localhost:1323/settings/update/exchange", bytes.NewReader(mapB))
//req := httptest.NewRequest(echo.POST, "/settings/update/exchange", bytes.NewReader(mapB))
rec := httptest.NewRecorder()
c := e.NewContext(req, rec)
u := p.UpdateDeductionRate(c)
assert.Equal(s.T(), "success", u)
但是,这样仍然会出现类似“不受支持的媒体类型”的错误消息
对于Get test,代码就像
req := httptest.NewRequest(echo.GET, "http://localhost:1323/admin/user_points/settings/get", nil)
//req := httptest.NewRequest(echo.GET, "/admin/user_points/settings/get", nil)
rec := httptest.NewRecorder()
c := e.NewContext(req, rec)
g := p.GetRates(c)
assert.Equal(s.T(), "success", g)
g为零。看起来好像根本没有调用处理程序p.UpdateDeductionRate(c echo.Context),p.GetRates(c echo.Context)。
我觉得echo.Context没有正确构造。有人知道吗?谢谢!
答案 0 :(得分:2)
问题可能是您在传递json编码的数据时未指定Content-Type
标头。
将req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON)
添加到您的代码中,它应该可以工作:
req := httptest.NewRequest(echo.GET, "http://localhost:1323/admin/user_points/settings/get", nil)
req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON)
rec := httptest.NewRecorder()
c := e.NewContext(req, rec)
g := p.GetRates(c)
assert.Equal(s.T(), "success", g)