whenListen<State> function
Creates a stub response for the listen
method on a bloc
.
Use whenListen if you want to return a canned Stream
of states
for a bloc
instance.
whenListen also handles stubbing the state
of the bloc
to stay
in sync with the emitted state.
Return a canned state stream of [0, 1, 2, 3]
when counterBloc.stream.listen
is called.
whenListen(counterBloc, Stream.fromIterable([0, 1, 2, 3]));
Assert that the counterBloc
state Stream
is the canned Stream
.
await expectLater(
counterBloc.stream,
emitsInOrder(
<Matcher>[equals(0), equals(1), equals(2), equals(3), emitsDone],
)
);
expect(counterBloc.state, equals(3));
Optionally provide an initialState
to stub the state of the bloc
before any subscriptions.
whenListen(
counterBloc,
Stream.fromIterable([0, 1, 2, 3]),
initialState: 0,
);
expect(counterBloc.state, equals(0));
Implementation
void whenListen<State>(
BlocBase<State> bloc,
Stream<State> stream, {
State? initialState,
}) {
final broadcastStream = stream.asBroadcastStream();
if (initialState != null) {
when(() => bloc.state).thenReturn(initialState);
}
when(() => bloc.stream).thenAnswer(
(_) => broadcastStream.map((state) {
when(() => bloc.state).thenReturn(state);
return state;
}),
);
}