Тестирование взаимодействия игрового контроллера с актером 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 ответ
Разве это не то, что вы хотите передать зондом своему контроллеру, а не фиктивной реализацией актера, как что-то будет отправлено зонду, если нет?