Тестирование маршрута распыления с помощью 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,

Другие вопросы по тегам