我正在尝试使用 Go-Chi 作为我的多路复用器为我的其余端点编写单元测试。
以前我使用 gorilla/mux,但后来搬到 Chi,因为随着应用程序的增长,它更容易维护。
使用 Gorilla/mux,我可以使用“ServeHTTP”发送测试请求,但使用 go-chi/chi 似乎没有做同样的事情。
var writer *httptest.ResponseRecorder
var r = chi.Mux{}
func TestMain(m *testing.M) {
setUp()
code := m.Run()
os.Exit(code)
}
func setUp() {
d, _ := database.ConnectToDB(database.TESTDBNAME)
writer = httptest.NewRecorder()
r := chi.NewMux()
r.Route("/companies", func(r chi.Router) {
r.Get("/", GetCompanies(d))
r.Get("/{id}", GetCompany(d))
r.Post("/", PostCompany(d))
r.Put("/{id}", PutCompany(d))
r.Delete("/{id}", DeleteCompany(d))
})
}
func TestPostCompany(t *testing.T) {
tables := []struct {
company model.Company
result int
}{
{model.Company{Name:"Test"}, 200},
}
for _, table := range tables {
company, err := json.Marshal(table.company)
if err != nil {
t.Errorf("JSON Error")
}
companyJson := strings.NewReader(string(company))
request, err := http.NewRequest("POST", "/companies", companyJson)
if err != nil {
t.Error(err)
}
r.ServeHTTP(writer, request)
if writer.Code != table.result {
t.Error(writer.Body)
}
}
}
现在测试显示 404 错误,但我希望它给出 200 错误。此请求在运行我的应用程序和手动测试时工作正常。
我相信这个问题与“ServeHTTP”有关。也许它与chi的工作方式不同。有谁知道如何让这个测试成功运行?