Спрей-тест-кит с самым масштабным статусом не работает

Я пытаюсь протестировать POST-спрей с самым масштабным, для которого требуется обязательный параметр adId. И не может заставить его работать. Мой код следует

import akka.actor._
import akka.event.LoggingReceive
import akka.testkit.{TestProbe}
import com.ss.rg.service.ad.AdImporterServiceActor.{GetImportStatus, StatusOfImport}
import org.scalatest.{MustMatchers, WordSpecLike}
import spray.http.{StatusCodes, MediaTypes}
import spray.testkit.ScalatestRouteTest

class AdServiceApiTest extends  WordSpecLike with MustMatchers with ScalatestRouteTest{
 "AdService REST api " must{
   "POST for import witout mandatory parameters should fail with " in{
      val p = TestProbe()
      val addressServiceMock = system.actorOf(Props(classOf[AdServiceActorMock],p.ref))

      Post("/service/ad/import") ~> new AdServiceApi(addressServiceMock).route ~>check{
        handled must be(false)
        status must be (StatusCodes.BadRequest)
      }
    }
  }

Тест не пройден, но по другой причине

Request was rejected with List(MissingQueryParamRejection(adId))
org.scalatest.exceptions.TestFailedException: Request was rejected with List(MissingQueryParamRejection(adId))
    at spray.testkit.ScalatestInterface$class.failTest(ScalatestInterface.scala:25)
    at com.ss.rg.api.ad.AdServiceApiTest.failTest(AdServiceApiTest.scala:19)
    at spray.testkit.RouteResultComponent$RouteResult$$anonfun$response$1$$anonfun$apply$1.apply(RouteResultComponent.scala:97)
    at spray.testkit.RouteResultComponent$RouteResult$$anonfun$response$1$$anonfun$apply$1.apply(RouteResultComponent.scala:95)
    at scala.Option.foreach(Option.scala:236)
    at spray.testkit.RouteResultComponent$RouteResult$$anonfun$response$1.apply(RouteResultComponent.scala:94)
...

Кажется, что статус даже не был проверен. Вторая вещь, которая мне не совсем понятна, это как на самом деле установить параметр adId в spray-testkit? Одним из способов является установка заголовка, но я не удивлюсь, что существует лучший способ.

Может кто-нибудь более опытный с комментарием спрей-тесткита?

Спасибо

1 ответ

Решение

Нет статуса - маршрут отклонил запрос. Вы можете получить доступ к отклонению как rejection и утверждают, что это тот тип, который вы ожидаете. Если вы хотите проверить, что на самом деле увидит браузер, вы должны обернуть маршрут в handleRejections директива с использованием по умолчанию RejectionHandler (это доступно неявно), и тогда вы сможете увидеть код состояния, который вы ожидаете. В таком случае handled выйдет как true хотя (потому что обернутый маршрут будет обрабатывать запрос - возвращая ответ с ошибочным кодом состояния и сообщением об ошибке).

Другие вопросы по тегам