Я использую мультиплексор Gorilla и пакет net/http для создания некоторых маршрутов следующим образом.
package routes
//some imports
//some stuff
func AddQuestionRoutes(r *mux.Router) {
s := r.PathPrefix("/questions").Subrouter()
s.HandleFunc("/{question_id}/{question_type}", getQuestion).Methods("GET")
s.HandleFunc("/", postQuestion).Methods("POST")
s.HandleFunc("/", putQuestion).Methods("PUT")
s.HandleFunc("/{question_id}", deleteQuestion).Methods("DELETE")
}
Я пытаюсь написать тест для проверки этих маршрутов. Например, я пытаюсь протестировать маршрут GET
, специально пытаясь вернуть 400
, поэтому у меня есть следующий тестовый код.
package routes
//some imports
var m *mux.Router
var req *http.Request
var err error
var respRec *httptest.ResponseRecorder
func init() {
//mux router with added question routes
m = mux.NewRouter()
AddQuestionRoutes(m)
//The response recorder used to record HTTP responses
respRec = httptest.NewRecorder()
}
func TestGet400(t *testing.T) {
//Testing get of non existent question type
req, err = http.NewRequest("GET", "/questions/1/SC", nil)
if err != nil {
t.Fatal("Creating 'GET /questions/1/SC' request failed!")
}
m.ServeHTTP(respRec, req)
if respRec.Code != http.StatusBadRequest {
t.Fatal("Server error: Returned ", respRec.Code, " instead of ", http.StatusBadRequest)
}
}
Однако, когда я запускаю этот тест, я получаю 404
, предположительно, потому что запрос не маршрутизируется правильно.?
Когда я тестирую этот GET-маршрут из браузера, он возвращает 400
, поэтому я уверен, что есть проблема с настройкой теста.
getQuestion
. Я воссоздал вашу настройку и реализовалgetQuestion
как неактивную. Когда я запускаюgo test ./...
, я получаю следующую ошибку:routes_test.go:32: Server error: Returned 200 instead of 400
. - person Amit Kumar Gupta   schedule 16.08.2014respRec
вместо того, чтобы создавать новый рекордер сhttptest.NewRecorder()
. Я предполагаю, что есть некоторые ограничения на повторное использование одного и того же httpRecorder. - person moesef   schedule 16.08.2014