Как создать gin.Context из * http.Request и * httptest.ResponseRecorder? - PullRequest
0 голосов
/ 09 октября 2018

Я хотел бы создать помощника по тестированию для джин , похожего на testify's HTTPBodyContain .

Мне трудно создать gin.Context из *http.Requestи *httptest.ResponseRecorder.Я уже написал что-то вроде этого:

func HTTPBodyContains(t *testing.T, handler gin.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {
    body := HTTPBody(handler, method, url, values)

    contains := strings.Contains(body, fmt.Sprint(str))
    if !contains {
        assert.Fail(t, fmt.Sprintf("Expected response body for \"%s\" to contain \"%s\" but found \"%s\"", url+"?"+values.Encode(), str, body))
    }

    return contains
}

func HTTPBody(handler gin.HandlerFunc, method, url string, values url.Values) string {
    w := httptest.NewRecorder()
    req, err := http.NewRequest(method, url+"?"+values.Encode(), nil)
    if err != nil {
        return ""
    }
    handler(&gin.Context{
        Request: req,
        Writer:  gin.ResponseWriter(w),
    })
    return w.Body.String()
}

, но это не сработает

Writer:  gin.ResponseWriter(w)

1 Ответ

0 голосов
/ 09 октября 2018

Хорошо, похоже, есть CreateTestContext , который делает то, что я искал.

func CreateTestContext(w http.ResponseWriter) (c *Context, r *Engine)

CreateTestContext возвращает новый движок и контекст для целей тестирования

...