Модульное тестирование с Go-Chi / Chi - PullRequest
1 голос
/ 22 июня 2019

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

...