block_test ライブラリを使用して単体テストを作成しようとしています。
これが私のコードです。
ログインキュービット
class LoginCubit extends Cubit<LoginState> with HydratedMixin {
final UserRepository _userRepository;
LoginCubit(this._userRepository) : super(LoginInitial());
Future<void> login (String email, String password , bool remember) async {
bool result = await _userRepository.isLoginCorrectWithEmailAndPassword(email, password);
if (result){
emit(LoggedIn(remember: remember, email: email));
} else {
emit(LoginError());
}
}
}
ログイン状態
part of 'login_cubit.dart';
@immutable
abstract class LoginState extends Equatable {}
class LoginInitial extends LoginState {
final bool remember;
final String email;
LoginInitial({this.remember = false, this.email = ''});
@override
List<Object?> get props => [remember, email];
}
class LoggedIn extends LoginState {
final bool remember;
final String email;
LoggedIn({required this.remember, required this.email});
@override
List<Object?> get props => [remember, email];
}
class LoginError extends LoginState {
LoginError();
@override
List<Object?> get props => [];
}
単体テスト
class MockUserRepository extends Mock implements UserRepository {
@override
Future<bool> isLoginCorrectWithEmailAndPassword(String email, String password) {
return Future.value(true);
}
}
void main() {
group('LoginCubit', () {
late LoginCubit loginCubit;
setUp(() {
loginCubit = LoginCubit(MockUserRepository());
});
tearDown(() {
loginCubit.close();
});
test('the initial state value is LoginInitial', () {
expect(loginCubit.state, LoginInitial());
});
blocTest<LoginCubit, LoginState>(
'TODO: description',
build: () => loginCubit,
act: (cubit) => cubit.login("any email", "any password", true),
expect: () => <LoginState>[
LoggedIn(remember: true, email: "any email"),
],
);
});
}
私の問題は、2 番目のテストが常に空の配列を返すことです。いくつかの印刷物では、コードが LoggedIn 状態を発行していると確信していますが、テストは実際にはそれを認識しません。
どこで間違えましたか?:)