In my app I have a CartActor managing a shopping cart and OrderManager overseeing the whole shopping process:
object CartActor {
sealed trait Command
case class AddItem(item: Any) extends Command
case class RemoveItem(item: Any) extends Command
case object ExpireCart extends Command
case object StartCheckout extends Command
case object ConfirmCheckoutCancelled extends Command
case object ConfirmCheckoutClosed extends Command
case object GetItems extends Command // command made to make testing easier
sealed trait Event
case class CheckoutStarted(checkoutRef: ActorRef) extends Event
def props() = Props(new CartActor())
}
object OrderManager {
sealed trait Command
case class AddItem(id: String) extends Command
case class RemoveItem(id: String) extends Command
case class SelectDeliveryAndPaymentMethod(delivery: String, payment: String) extends Command
case object Buy extends Command
case object Pay extends Command
case class ConfirmCheckoutStarted(checkoutRef: ActorRef) extends Command
case class ConfirmPaymentStarted(paymentRef: ActorRef) extends Command
case object ConfirmPaymentReceived extends Command
sealed trait Ack
case object Done extends Ack //trivial ACK
}
OrderManager receives OrderManager.ConfirmCheckoutStarted(checkoutRef: ActorRef) from CartActor. I have to write unit tests to check that. I wanted to do:
it should "start checkout" in {
val cart = TestActorRef[CartActor]
cart ! AddItem("Item")
cart ! StartCheckout
expectMsg(OrderManager.ConfirmCheckoutStarted)
}
But I get an error: assertion failed: expected ConfirmCheckoutStarted, found ConfirmCheckoutStarted(Actor[akka://CartTest/user/$$d/checkout#-1922766677]). I see that the problem is that there is a parameter in parantheses. How can I test this? I don't care about the actorRef inside, I just want ConfirmCheckoutStarted.