Отказы от распыления не преобразуются в код состояния?
Я следую инструкции по распылению отсюда. Вот я и собрал довольно простой тест
class AtoImportServiceApiTest extends WordSpecLike with MustMatchers with ScalatestRouteTest {
"AtoImportService" must {
"return HTTP status 401 Unauhorized when accessing withou basic auth" in {
Post("/ato/v1/orders/updateStatus") ~>new AtoImportServiceApi().route ~> check {
handled must be(false)
rejections must have size 1
status === StatusCodes.Unauthorized
}
}
}
}
Я звоню по маршруту, который содержит санкционированную директиву. Поэтому я ожидаю, что отказ будет преобразован в код состояния HTTP. Но этого не происходит, и тест не пройден.
Request was rejected with List(AuthenticationFailedRejection(CredentialsMissing,List(WWW-Authenticate: Basic realm="bd ato import api")))
ScalaTestFailureLocation: spray.testkit.RouteTest$class at (RouteTest.scala:74)
org.scalatest.exceptions.TestFailedException: Request was rejected with List(AuthenticationFailedRejection(CredentialsMissing,List(WWW-Authenticate: Basic realm="bd ato import api")))
at spray.testkit.ScalatestInterface$class.failTest(ScalatestInterface.scala:25)
Я скучаю по какой-то важной концепции здесь?
1 ответ
Вам нужно "запечатать маршрут", чтобы увидеть действительные коды состояния. Запечатывание маршрута означает, что обработчики отклонения и исключения по умолчанию используются для обработки любых до сих пор необработанных отклонений и исключений. Это автоматически делается при использовании runRoute
в вашем сервисе, но это не делается автоматически в тестовом наборе, чтобы вы могли напрямую проверять наличие отклонений.
Используя спрей-тест-кит, вы должны обернуть свой маршрут sealRoute(...)
как объяснено здесь: http://spray.io/documentation/1.2.2/spray-testkit/
Попробуй это:
Post("/ato/v1/orders/updateStatus") ~> sealRoute(new AtoImportServiceApi().route) ~> check { // ...