Testen von HTTP-Routen in Golang
Ich benutze Gorilla Mux und das net / http-Paket, um einige Routen wie folgt zu erstellen
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")
}
Ich versuche, einen Test zu schreiben, um diese Routen zu testen. Zum Beispiel versuche ich das zu testenGET
Route speziell versucht, eine zu bekommen400
zurückgegeben, so habe ich den folgenden Testcode.
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)
}
}
Wenn ich diesen Test durchführe, erhalte ich jedoch eine404
Möglicherweise, weil die Anforderung nicht richtig weitergeleitet wird.
Wenn ich diese GET-Route vom Browser aus teste, gibt sie a zurück400
Ich bin mir also sicher, dass es ein Problem mit der Art und Weise gibt, wie der Test eingerichtet wird.