Тестирование маршрута распыления с помощью Akka TestProbe
В моем маршруте Spray я делегирую актеру обработать запрос. RequestContext
отправляется в сообщении этому актеру.
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 ответ
Решение
Я не решил вопрос, но решил свою проблему с помощью TestActorRef
вместо TestProbe
, Тогда я мог бы указать упрощенное поведение и по-прежнему отвечать на ctx
,