Having created an Akka actor in Play Framework, I now want to test it. However I immediately hit a problem:
Can anyone provide a canonical example of testing an Akka actor using TestKit and Play's test fixtures?
For consistency's sake I would prefer it to use Specs2 (frankly, it seems bizarre to require two different testing frameworks for a single app) however I will accept a ScalaTest example if it integrates well with the Play test fixtures.
There is really nothing special to it, you basically just have tests that looks like the actor samples but using the specs2 test syntax instead. If you want to use the akka test utilities you will have to add an explicit dependency on it from your build.sbt
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-testkit" % "2.2.0" % "test"
)
Then there is nothing special to it, except that you cannot inherit TestKit on the test class since Specification also is a class and there are name classes. This is an example of how you could use a custom Scope for using TestKit:
import org.specs2.specification.Scope
class ActorSpec extends Specification {
class Actors extends TestKit(ActorSystem("test")) with Scope
"My actor" should {
"do something" in new Actors {
val actor = system.actorOf(Props[SomeActor])
val probe = TestProbe()
actor.tell("Ping", probe.ref)
probe.expectMsg("Pong")
}
"do something else" in new Actors { new WithApplication {
val actor = system.actorOf(Props[SomeActorThatDependsOnApplication])
val probe = TestProbe()
actor.tell("Ping", probe.ref)
probe.expectMsg("Pong")
}}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With