Тестирование взаимодействия игрового контроллера с актером akka

Мое игровое приложение использует актер akka для обработки длительных вычислений:

class MyController(myActor : ActorRef) extends Controller{
  def doStuff = Action { implicit request =>

    val response : Future[Any] = myActor ? DoStuff

    Async{
      response.map{        
        str : String => Ok(str)
      }
    }
  }
}

Я пытаюсь проверить, что все работает правильно. У меня есть отдельные тесты для проверки того, что актер ведет себя должным образом и в основном просто хочу проверить, что контроллер отправляет актеру правильные сообщения. Мой нынешний подход выглядит примерно так:

class MyControllerSpec extends Specification{
  "MyController" should {

    object DummyActor extends Actor{
      def receive = {
        case _ => ()
      }
    }

    "do stuff properly" >> {
       val probe = TestProbe()(Akka.system)
       val test = new controllers.MyController(Akka.system.actorOf(Props(DummyActor))
       val result = test.doStuff(FakeRequest())
       probe.expectMsg(SomeMsg)
    }
  }
}

Контроллер отправит сообщение переданному субъекту при вызове действия doStuff. Я пытаюсь убедиться, что отправлено правильное сообщение.

Я думаю, что test.doStuff запускается синхронно и время ожидания, когда фиктивный актер ничего не отправляет. Ожидается, что ожидаемый файл не будет запущен до тех пор, пока не вернется вызов doStuff и не будет отправлено сообщение SomeMsg. Как я могу решить эту проблему?

1 ответ

Решение

Разве это не то, что вы хотите передать зондом своему контроллеру, а не фиктивной реализацией актера, как что-то будет отправлено зонду, если нет?

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