Модульное тестирование с Go-Chi/Chi

Я пытаюсь написать модульные тесты для моих конечных точек отдыха, используя 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". Может быть, это работает по-другому с ци. Кто-нибудь знает, как успешно запустить этот тест?

0 ответов

Другие вопросы по тегам