спрей-тесткит со скалатестом, статус не работает

Я пытаюсь протестировать маршрут распыления POST с помощью scalatest, для которого требуется обязательный параметр 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? Один из способов — установить заголовок, но я не удивлюсь, если существует лучший способ.

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

Спасибо


person jaksky    schedule 16.03.2015    source источник


Ответы (1)


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

person lmm    schedule 16.03.2015
comment
@ Имм Ааа, хорошо. Имеет смысл. Разве вы не знаете, как установить параметры для POST, строки запроса - person jaksky; 16.03.2015
comment
Строки запроса, которые я обычно просто помещаю в URL-адрес, например. Post("/path/to?param=value", body). Если вам нужен более структурированный подход, вы можете использовать Uri для создания URL-адреса из отдельных компонентов. Вторым параметром Post может быть тело сообщения; он должен иметь маршаллер в области действия (например, с использованием SprayJsonSupport и подходящего JsonFormat). - person lmm; 16.03.2015