在 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());
});