![](/img/trans.png)
[英]FLUTTER: When testing cubit, loading state isn't emitted, only loaded state is
[英]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.