#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.Обработчик для тестирования.