使用 Akka TestProbe 进行喷雾路径测试
Spray route testing with Akka TestProbe
在我的 Spray 路线中,我委托一个 actor 来处理请求。 RequestContext
在消息中发送给该演员。
path("mypath") {
parameters("thing".as[String]) { thing => ctx =>
myActor ! ProcessThingAndResondToContext(thing, ctx)
}
}
在我的测试中,我用 TestProbe
代替了 actor,因为 actor 的处理成本很高。
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
.[= 进行类型检查19=]
如何测试委托给 actor 的路由?
我没有解决问题,但使用 TestActorRef
而不是 TestProbe
解决了我的问题。然后我可以指定一个简化的行为并仍然响应 ctx
.
在我的 Spray 路线中,我委托一个 actor 来处理请求。 RequestContext
在消息中发送给该演员。
path("mypath") {
parameters("thing".as[String]) { thing => ctx =>
myActor ! ProcessThingAndResondToContext(thing, ctx)
}
}
在我的测试中,我用 TestProbe
代替了 actor,因为 actor 的处理成本很高。
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
.[= 进行类型检查19=]
如何测试委托给 actor 的路由?
我没有解决问题,但使用 TestActorRef
而不是 TestProbe
解决了我的问题。然后我可以指定一个简化的行为并仍然响应 ctx
.