Httptest.NewRecorder () Go не регистрирует попадания в отчете о покрытии - PullRequest
0 голосов
/ 27 февраля 2020

Наша цель - иметь хорошие интеграционные тесты на нашем API, поэтому мы используем возможности маршрутизатора gin вместе с httptest.NewRecorder () для настройки фиктивной конечной точки процесса, к которой мы можем симулировать вызовы http. Это гарантирует, что мы тестируем фактические привязки пути, промежуточное программное обеспечение и т. Д. c.

Наша проблема связана со встроенными go отчетами о покрытии *1019* из: go test -coverprofile = охват. TXT. / ... Он не регистрирует хиты против API. Полный сценарий, который мы используем для получения покрытия и загрузки на codecov.io, выглядит примерно так: https://github.com/codecov/example-go Мы собираем oop в go пакет и собираем покрытие. Txt.

Кто-нибудь испытывал это? Как мы исправим? Предполагается ли, что косвенный характер вызова кода через смоделированные http-запросы вызывает этот пробел?

Как воспроизвести:

http := gin.New()
api := http.Group("/api")
api.GET("/", apis.WelcomeHandler)

et c ...

func PerformRequest(r http.Handler, method, path string, headers map[string]string, jsonPost string) *httptest.ResponseRecorder {
var payload io.Reader
if len(jsonPost) > 0 {
payload = bytes.NewBufferString(jsonPost)
}
req, err := http.NewRequest(method, path, payload)

if err != nil {
    fmt.Printf("Problem sending http request, %e", err)
    return nil
}
if headers != nil && len(headers) > 0 {
    for k, v := range headers {
        req.Header.Add(k, v)
    }
}
if len(jsonPost) > 0 {
    req.Header.Set("Content-Type", "application/json") // This makes it work
}
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
return w
}

Среда MacOS X go версия go1.13.4 darwin / amd64

...