spray-testkit 使用 scalatest,状态不起作用
spray-testkit with scalatest, status doesn't work
我正在尝试使用需要强制参数 adId 的 scalatest 测试 POST spray-route。并且无法使其工作。我的代码如下
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$$anonfun$apply.apply(RouteResultComponent.scala:97)
at spray.testkit.RouteResultComponent$RouteResult$$anonfun$response$$anonfun$apply.apply(RouteResultComponent.scala:95)
at scala.Option.foreach(Option.scala:236)
at spray.testkit.RouteResultComponent$RouteResult$$anonfun$response.apply(RouteResultComponent.scala:94)
...
似乎还没有检查状态。
我没有完全弄清楚的第二件事是如何在 spray-testkit 中实际设置 adId 参数?一种方法是通过设置 header,但如果存在更好的方法,我不会感到惊讶。
有人可以 spray-testkit 发表评论吗?
感谢
没有状态 - 路由 rejected 请求。您可以通过 rejection
访问拒绝并断言它是您期望的类型。如果你想检查浏览器实际会看到什么,你应该使用默认的 RejectionHandler
(它是隐式可用的)将路由包装在 handleRejections
指令中,然后你将能够看到你的状态代码期待。在这种情况下,handled
将作为 true
出现(因为包装路由将处理请求 - 通过返回带有失败状态码和错误消息的响应)。
我正在尝试使用需要强制参数 adId 的 scalatest 测试 POST spray-route。并且无法使其工作。我的代码如下
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$$anonfun$apply.apply(RouteResultComponent.scala:97)
at spray.testkit.RouteResultComponent$RouteResult$$anonfun$response$$anonfun$apply.apply(RouteResultComponent.scala:95)
at scala.Option.foreach(Option.scala:236)
at spray.testkit.RouteResultComponent$RouteResult$$anonfun$response.apply(RouteResultComponent.scala:94)
...
似乎还没有检查状态。 我没有完全弄清楚的第二件事是如何在 spray-testkit 中实际设置 adId 参数?一种方法是通过设置 header,但如果存在更好的方法,我不会感到惊讶。
有人可以 spray-testkit 发表评论吗?
感谢
没有状态 - 路由 rejected 请求。您可以通过 rejection
访问拒绝并断言它是您期望的类型。如果你想检查浏览器实际会看到什么,你应该使用默认的 RejectionHandler
(它是隐式可用的)将路由包装在 handleRejections
指令中,然后你将能够看到你的状态代码期待。在这种情况下,handled
将作为 true
出现(因为包装路由将处理请求 - 通过返回带有失败状态码和错误消息的响应)。