Отказы от распыления не преобразуются в код состояния?

Я следую инструкции по распылению отсюда. Вот я и собрал довольно простой тест

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 { // ...
Другие вопросы по тегам