akka/akka-core
在 GitHub 查看Only EventSourcedBehavior, or nested EventSourcedBehavior allowed. exception thrown in EventSourcedBehaviorTestKit
Open
#30,747 建立於 2021年10月5日
1 - triagedhelp wantedt:persistencet:testing
描述
There is an issue when running EventSourcedBehaviorTestKit and receiveSignal() handler defined on actor's EventSourcedBehavior.
Initially found it on one of akka examples - https://developer.lightbend.com/docs/akka-platform-guide/microservices-tutorial/dev-env.html
STR:
- Add
receiveSignalhandler toEventSourcedBehaviore.g.
EventSourcedBehavior
.withEnforcedReplies[Command, Event, State](
persistenceId = PersistenceId(EntityKey.name, cartId),
emptyState = State.empty,
commandHandler =
(state, command) => handleCommand(cartId, state, command),
eventHandler = (state, event) => handleEvent(state, event))
.receiveSignal {
case (_, signal) =>
//react to the persistent events e.g. RecoveryCompleted/ SnapshotFailed etc
println("Received signal: "+ signal)
}
- Initialize
EventSourcedBehaviorTestKit:
private val cartId = "testCart"
private val eventSourcedTestKit =
EventSourcedBehaviorTestKit[
ShoppingCart.Command,
ShoppingCart.Event,
ShoppingCart.State](system, ShoppingCart(cartId, "carts-0"))
Expected result: test run succesfully Actual result: an exception is thrown:
An exception or error caused a run to abort: Only EventSourcedBehavior, or nested EventSourcedBehavior allowed.
java.lang.IllegalArgumentException: Only EventSourcedBehavior, or nested EventSourcedBehavior allowed.
at akka.persistence.testkit.internal.EventSourcedBehaviorTestKitImpl.liftedTree1$1(EventSourcedBehaviorTestKitImpl.scala:111)
at akka.persistence.testkit.internal.EventSourcedBehaviorTestKitImpl.<init>(EventSourcedBehaviorTestKitImpl.scala:107)
at akka.persistence.testkit.scaladsl.EventSourcedBehaviorTestKit$.apply(EventSourcedBehaviorTestKit.scala:113)
at akka.persistence.testkit.scaladsl.EventSourcedBehaviorTestKit$.apply(EventSourcedBehaviorTestKit.scala:101)
at shopping.cart.ShoppingCartSpec.<init>(ShoppingCartSpec.scala:32)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:78)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)