簡體   English   中英

單元測試一肘

[英]Unit Testing a Cubit

這是我第一次嘗試測試我的Cubit class,所以請多多包涵,因為我在嘗試了好幾個小時后完全沒有想法。

我正在嘗試測試一個看起來像這樣的簡單肘尺:

@injectable
class ResetPasswordCubit extends Cubit<ResetPasswordState> {

  ResetPasswordCubit() : super(ResetPasswordInitial());

  void attemptPasswordReset({required ResetPasswordParams params}) async {
    emit(ResetPasswordLoading());
    emit(ResetPasswordLoaded());
  }
}

我想要做的就是驗證這兩種狀態是否按順序發出。 根據文檔,有幾種方法可以做到這一點,但我什至不確定我應該使用哪一種。 我更願意使用單元測試,盡管我都試過了。 這是我所擁有的:

class MockResetPasswordCubit extends MockCubit<ResetPasswordState>
    implements ResetPasswordCubit {}

@GenerateMocks([ResetPassword])
void main() {
  late MockResetPassword mockResetPassword;
  late MockResetPasswordCubit cubit;
  late ResetPasswordParams params;

  setUp(() {
    mockResetPassword = MockResetPassword();
    cubit = MockResetPasswordCubit();
    params = const ResetPasswordParams(
        pin: "1234", password: "hello", confirmPassword: "hello");
    when(mockResetPassword.call(params))
        .thenAnswer((_) async => const Right(ResetPasswordResult.validated));
  });

  blocTest<ResetPasswordCubit, ResetPasswordState>(
      'when attempt to validate password is made then loading state is emitted',
      build: () => cubit,
      act: (cubit) => cubit.attemptPasswordReset(params: params),
      expect: () => [ResetPasswordLoading(), ResetPasswordLoaded()]);
}

這是顯示的錯誤:

預期:[“ResetPasswordLoading”實例,“ResetPasswordLoaded”實例]
實際的: []
其中:位置 [0] 是 [],比預期的要短

我真的沒有想法,所以希望有人可以讓我直截了當。 謝謝。

似乎您正在嘗試測試ResetPasswordCubit但您所做的是模擬它,因此無法測試實際的 cubit 行為。

只是不要模擬你想要測試的手肘並創建它的一個實例:

blocTest<ResetPasswordCubit, ResetPasswordState>(
  'when attempt to validate password is made then loading state is emitted',
  build: () => ResetPasswordCubit(), // <-- Creating an instance of Cubit
  act: (cubit) => cubit.attemptPasswordReset(params: params),
  expect: () => [ResetPasswordLoading(), ResetPasswordLoaded()],
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM