我的游戏应用程序使用 akka actor 来处理长时间运行的计算:
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是同步运行的,当虚拟演员不发送任何内容时超时。期望Msg直到doStuff调用返回并且SomeMsg已经发送之后才会开始。如何解决这个问题?
您不想将探测器传递给控制器而不是虚拟参与者实现,如果不是,如何将某些内容发送到探测器?