У вас есть пара проблем.
Во-первых, ваш тест предоставляет функцию testHandler
, которая должна работать при любых ошибках, но ваша функция JwtVerify
запускает только следующий обработчик, если токен допустимо:
if token.Valid {
log.Println("JWT Token is valid")
next.ServeHTTP(rw, r)
}
, поэтому вы убедились, что testHandler
никогда не будет запущен, когда токен недействителен, и, следовательно, ваш тест не пройдёт.
Ваша вторая проблема здесь:
if r.Response.StatusCode == 403 {
t.Fatalf("Response should be 200 for a valid JWT Token")
}
Согласно документации для http.Request
:
Ответ - это ответ перенаправления, вызвавший создание этого запроса. Это поле заполняется только во время перенаправления клиента.
, и поскольку этот запрос не является ответом на перенаправление клиента, поле Response
заполняться не будет, и, в частности, код состояния не будет определяется заголовками, которые вы написали своему http.ResponseWriter
. Как правило, вы не можете получить код состояния таким способом, и обычным способом было бы иметь более раннее промежуточное ПО, обертывающее http.ResponseWriter
, и получать статус от этого средства записи оболочки после промежуточного программного обеспечения, которое записало статус, возвращается.
Как уже упоминалось в комментарии, правильный способ go об этом - проверить ваш httptest.ResponseRecorder
на код состояния, поскольку его цель - проверить ответы HTTP во время тестов.