2

我正在尝试使用 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的工作方式不同。有谁知道如何让这个测试成功运行?

4

0 回答 0