Тестирование конечной точки Beego — пустой URI запроса

#testing #uri #beego

#тестирование #uri #beego

Вопрос:

Вот как выглядит мой контроллер

 func (o *MyController) Get() {
    uri := o.Ctx.Input.URI()
    beego.Trace(uri)
}
 

Теперь, если я сделаю запрос к соответствующей конечной точке, например «http://localhost:8081/path?key=value «, я получаю правильное значение для uri

Но если я протестирую его с помощью следующего кода

 func TestGet(t *testing.T) {
    Convey("valid request case", t, func() {
        w := httptest.NewRecorder()
        uri := "/path?key=value"
        r, _ := http.NewRequest("GET", uri, nil)
        beego.BeeApp.Handlers.ServeHTTP(w, r)
        So(w.Code, ShouldEqual, 200)
    })
}
 

uri в контроллере — пустая строка

Однако o.Ctx.Request.URL.Path имеет правильное значение, т.е. ‘/path’

Ответ №1:

Согласно документам https://golang.org/pkg/net/http/#NewRequest

NewRequest возвращает запрос, подходящий для использования с клиентом.Выполнить или транспортировать.Туда и обратно. Чтобы создать запрос для использования с тестированием обработчика сервера, используйте ReadRequest или вручную обновите поля запроса.

Для golang 1.7 для создания запроса на тестирование следует использовать следующий метод https://golang.org/pkg/net/http/httptest/#NewRequest

NewRequest возвращает новый входящий запрос сервера, подходящий для передачи в http.Обработчик для тестирования.