Toque ! 2.2.4 / Akka: os testes falharam quando executados juntos, mas ok separadamente
Eu tenho um controlador queask
s um ator antes de responder e dois casos de teste:
play test
o segundo teste falhaQuando eu corroplay testOnly ApplicationSpec
eplay testOnly IntegrationSpec
ambos conseguemEu acho que o sistema Akka é desligado no primeiro teste e não é iniciado novamente no segundo teste, mas por quê? E como posso resolver isso?
O controlador:
object Application extends Controller {
implicit val _ = Timeout(3 seconds)
val gamesManagerRef = Akka.system().actorOf(GamesManager.props)
def index = Authenticated.async { implicit request =>
(gamesManagerRef ? GamesManager.ListWaitingGames).map {
case GamesManager.MultipleOperationOk(games) =>
Ok(views.html.index(GameInformation.getWaitings(request.jedis)))
}
}
}
O teste de unidade:
class ApplicationSpec extends Specification {
"Application" should {
"send 404 on a bad request" in new WithApplication{
route(FakeRequest(GET, "/boum")) must beNone
}
"render the index page" in new WithApplication{
val home = route(FakeRequest(GET, "/")).get
status(home) must equalTo(OK)
contentType(home) must beSome.which(_ == "text/html")
contentAsString(home) must contain ("jumbotron")
}
}
}
O teste de integração:
class IntegrationSpec extends Specification {
"Application" should {
"work from within a browser" in new WithBrowser {
browser.goTo("http://localhost:" + port)
browser.pageSource must contain("jumbotron")
}
}
}
Os testes são bastante semelhantes aos padrões quando gerados porplay new
Conteúdo fornecido quando ambos são executados:
play.api.Application$anon$1: Execution exception[[AskTimeoutException: Recipient[Actor[akka://application/user/$a#1274766555]] had already been terminated.]]
at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10.jar:2.2.1]
at play.api.test.FakeApplication.handleError(Fakes.scala:203) ~[play-test_2.10.jar:2.2.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$anonfunConteúdo fornecido quando ambos são executados:$anonfun$apply$1.applyOrElse(PlayDefaultUpstreamHandler.scala:165) ~[play_2.10.jar:2.2.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$anonfunConteúdo fornecido quando ambos são executados:$anonfun$apply$1.applyOrElse(PlayDefaultUpstreamHandler.scala:162) ~[play_2.10.jar:2.2.1]
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33) ~[scala-library.jar:na]
at scala.util.Failure$anonfun$recover$1.apply(Try.scala:185) ~[scala-library.jar:na]
Caused by: akka.pattern.AskTimeoutException: Recipient[Actor[akka://application/user/$a#1274766555]] had already been terminated.
at akka.pattern.AskableActorRef$.ask$extension(AskSupport.scala:134) ~[akka-actor_2.10.jar:2.2.0]
at akka.pattern.AskableActorRef$.$qmark$extension(AskSupport.scala:146) ~[akka-actor_2.10.jar:2.2.0]
at controllers.Application$anonfun$index$1.apply(Application.scala:24) ~[classes/:na]
at controllers.Application$anonfun$index$1.apply(Application.scala:23) ~[classes/:na]
at controllers.Application$Authenticated$anonfun$invokeBlock$3.apply(Application.scala:74) ~[classes/:na]
at controllers.Application$Authenticated$anonfun$invokeBlock$3.apply(Application.scala:69) ~[classes/:na]
O que fornece a página de erro gerada pelo Play! para o teste que não contém o meu "jumbotron"
Eu tentei criar novasFakeApplication
cederWithBrowser
construtor, mas apenas a página vazia acontece.
Fonte de código completo disponível:https://github.com/Isammoc/yinyang/tree/8cf8ad625b7ef35423f17503a2a35fe390352d22