在 Flutter Mockito BlocTest 中找不到初始状态
In Flutter Mockito BlocTest not finding Initial State
我正在尝试做一个非常简单的 blocTest 来测试初始状态。但是低于错误。有趣的是,我在同一个项目中确实有另一个工作集团和测试。我逐行检查是否有任何不匹配,但一切看起来都很完美,除了 'act',这是我在另一个地方而不是在这里做的,假设与这个初始状态测试无关。知道为什么这个集团会发生这种情况吗?
Expected: [ReadyToAuthenticateState:ReadyToAuthenticateState()]
Actual: []
Which: at location [0] is [] which shorter than expected
我的bloc测试
late MockUserAuthenticationUseCase mockUsecase;
late UserAuthenticationBloc authBloc;
setUp(() {
mockUsecase = MockUserAuthenticationUseCase();
authBloc = UserAuthenticationBloc(usecase: mockUsecase);
});
blocTest<UserAuthenticationBloc, UserAuthenticationState>(
'emits [MyState] when MyEvent is added.',
build: () => authBloc,
expect: () => <UserAuthenticationState>[ReadyToAuthenticateState()],
);
我的集团
class UserAuthenticationBloc
extends Bloc<UserAuthenticationEvent, UserAuthenticationState> {
final UserAuthenticationUseCase usecase;
UserAuthenticationBloc({required this.usecase})
: super(ReadyToAuthenticateState()) {
on<UserAuthenticationEvent>((event, emit) {
if (event is AuthenticateUserWithCredentialsEvent) {
_processReadyToAuthenticateEvent(event);
}
});
}
void _processReadyToAuthenticateEvent(
AuthenticateUserWithCredentialsEvent event) async {
await usecase(
UserAuthenticationUseCaseParams(event.username, event.password));
}
}
更新 #1: 我也将初始状态期望插入到其他工作的 blocTest 中,但得到了同样的错误。看来我们不应该测试初始状态。
这是 bloc_test
包中的 expect
属性 文档:
/// [expect] is an optional `Function` that returns a `Matcher` which the `bloc`
/// under test is expected to emit after [act] is executed.
意思是,在 expect
回调中,您应该只放置 emitted 状态。初始状态就是初始状态,它不会在您向 BLoC 添加事件后发出。
如果您想验证 BLoC 的初始状态,可以为其编写单独的测试:
test('should set initial state', () {
expect(authBloc.state, ReadyToAuthenticateState());
});
我正在尝试做一个非常简单的 blocTest 来测试初始状态。但是低于错误。有趣的是,我在同一个项目中确实有另一个工作集团和测试。我逐行检查是否有任何不匹配,但一切看起来都很完美,除了 'act',这是我在另一个地方而不是在这里做的,假设与这个初始状态测试无关。知道为什么这个集团会发生这种情况吗?
Expected: [ReadyToAuthenticateState:ReadyToAuthenticateState()]
Actual: []
Which: at location [0] is [] which shorter than expected
我的bloc测试
late MockUserAuthenticationUseCase mockUsecase;
late UserAuthenticationBloc authBloc;
setUp(() {
mockUsecase = MockUserAuthenticationUseCase();
authBloc = UserAuthenticationBloc(usecase: mockUsecase);
});
blocTest<UserAuthenticationBloc, UserAuthenticationState>(
'emits [MyState] when MyEvent is added.',
build: () => authBloc,
expect: () => <UserAuthenticationState>[ReadyToAuthenticateState()],
);
我的集团
class UserAuthenticationBloc
extends Bloc<UserAuthenticationEvent, UserAuthenticationState> {
final UserAuthenticationUseCase usecase;
UserAuthenticationBloc({required this.usecase})
: super(ReadyToAuthenticateState()) {
on<UserAuthenticationEvent>((event, emit) {
if (event is AuthenticateUserWithCredentialsEvent) {
_processReadyToAuthenticateEvent(event);
}
});
}
void _processReadyToAuthenticateEvent(
AuthenticateUserWithCredentialsEvent event) async {
await usecase(
UserAuthenticationUseCaseParams(event.username, event.password));
}
}
更新 #1: 我也将初始状态期望插入到其他工作的 blocTest 中,但得到了同样的错误。看来我们不应该测试初始状态。
这是 bloc_test
包中的 expect
属性 文档:
/// [expect] is an optional `Function` that returns a `Matcher` which the `bloc`
/// under test is expected to emit after [act] is executed.
意思是,在 expect
回调中,您应该只放置 emitted 状态。初始状态就是初始状态,它不会在您向 BLoC 添加事件后发出。
如果您想验证 BLoC 的初始状态,可以为其编写单独的测试:
test('should set initial state', () {
expect(authBloc.state, ReadyToAuthenticateState());
});