Probar rutas HTTP en Golang
Estoy usando Gorilla mux y el paquete net / http para crear algunas rutas de la siguiente manera
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")
}
Estoy tratando de escribir una prueba para probar estas rutas. Por ejemplo, estoy tratando de probar elGET
ruta específicamente tratando de obtener un400
devuelto, así que tengo el siguiente código de prueba.
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)
}
}
Sin embargo, cuando ejecuto esta prueba, obtengo un404
posiblemente porque la solicitud no se enruta correctamente.
Cuando pruebo esta ruta GET desde el navegador, devuelve un400
así que estoy seguro de que hay un problema con la forma en que se configura la prueba.