Оборачивание методов httptest во вспомогательную функцию - PullRequest
0 голосов
/ 04 сентября 2018

В моих тестах обработчика я использую шаблон обслуживания тестового запроса с токеном аутентификации в заголовке большое количество раз. Чтобы абстрагировать это и сэкономить большое количество строк, я написал следующую функцию:

func serveTestReq(payload string, route string, method string, handlerfunc func(w http.ResponseWriter, r *http.Request), token string) {
        body := strings.NewReader(payload)
        req, err := http.NewRequest(method, route, body)
        Expect(err).NotTo(HaveOccurred())

        req.Header.Add("Content", "application/json")
        req.Header.Add("Authorization", "Bearer "+token)

        handler := authMiddleware(handlerfunc)
        rr := httptest.NewRecorder()
        handler.ServeHTTP(rr, req)

}

Однако, если я вызываю эту функцию дважды (например, для проверки идемпотента POST с), запрос, похоже, будет обработан только один раз. Что-то не так с вышеуказанной функцией?

1 Ответ

0 голосов
/ 04 сентября 2018

Проблема заключалась в том, что я не проверял HTTP-ответ, сгенерированный в функции. Правильная функция выглядит так:

func serveTestReq(payload string, route string, method string, handlerfunc func(w http.ResponseWriter, r *http.Request), token string) *httptest.RepsonseRecorder {
        body := strings.NewReader(payload)
        req, err := http.NewRequest(method, route, body)
        Expect(err).NotTo(HaveOccurred())

        req.Header.Add("Content", "application/json")
        req.Header.Add("Authorization", "Bearer "+token)

        handler := authMiddleware(handlerfunc)
        rr := httptest.NewRecorder()
        handler.ServeHTTP(rr, req)

        return rr

}
...