使用Akka TestProbe进行喷雾路线测试

时间:2015-03-18 00:48:34

标签: scala spray specs2 spray-test akka-testkit

在我的Spray路线中,我委托演员处理请求。 RequestContext将在消息中发送给该actor。

path("mypath") {
  parameters("thing".as[String]) { thing => ctx =>
    myActor ! ProcessThingAndResondToContext(thing, ctx)
  }
}

在我的测试中,我用TestProbe代替演员,因为演员的处理费用很高。

class MySpec extends Specification with Specs2RouteTest with ScalaCheck with MyService {
  val testProbe = TestProbe()
  override val myActor = testProbe.ref

  def is = s2"""
    it should $doTheRightThing
  """

  def doTheRightThing = {
    Get(s"/mypath?thing=fruit") ~> route ~> check {
      testProbe.expectMsgClass(classOf[ProcessThingAndResondToContext])
      status mustEqual StatusCodes.Success
    }
  }

此规范失败,因为没有status。 TestProbe什么都不做,因此ctx从未响应过。

Request was neither completed nor rejected within 1 second

status mustEqual StatusCodes.Success对我的测试并不重要,但我无法将其删除,因为规范无法编译 - 该方法不再像MatchResult那样进行攻击。

如何测试委托给演员的路线?

1 个答案:

答案 0 :(得分:0)

我没有解决问题,但使用TestActorRef代替TestProbe解决了我的问题。然后我可以指定简化的行为并仍然回复ctx