I am creating test for my login procedures.
in first case if I expect only ProcessState.loading my test get success, but to confirm the full process I need to add second approach ProcessState.error but it is giving me the error that I defined below.
C:\src\flutter\bin\flutter.bat --no-color test --machine --start-paused --plain-name "Login provider" test\provider_test\login_provider_state.dart
package:test_api expectLater
package:flutter_test/src/widget_tester.dart 468:10 expectLater
test\provider_test\login_provider_state.dart 27:7 main.<fn>.<fn>
loginCall:: ProcessState.error
Expected: ProcessState:<ProcessState.error>
Actual: ProcessState:<ProcessState.loading>
As you can see it's printing ProcessState.error, but not working.
attaching my full code below.
Test section
class MockLoginRepository extends Mock implements LoginRepository {}
void main(){
group('Login provider', (){
LoginProvider loginProvider;
MockLoginRepository repository;
setUp((){
repository = MockLoginRepository();
loginProvider = LoginProvider(repository);
});
test('login screen state test', () {
loginProvider.emailController.text = 'mail@mailinator.com';
loginProvider.passwordController.text = '12345678';
loginProvider.loginCall();
expect(loginProvider.state, ProcessState.loading);
expectLater(loginProvider.state, ProcessState.error);
});
});
}
Repository section
abstract class LoginRepository {
Future<LoginResponse> loginCall(String email, String password);
}
Provider section
enum ProcessState {ideal, loading, loaded, error}
class LoginProvider extends ProviderState {
final LoginRepository loginRepository;
TextEditingController emailController = TextEditingController();
TextEditingController passwordController = TextEditingController();
LoginProvider(this.loginRepository);
void loginCall() async {
state = ProcessState.loading;
LoginResponse response = await loginRepository.loginCall(
emailController.text,
passwordController.text,
);
if(response != null) {
state = ProcessState.loaded;
print('loginCall:: $state');
} else {
state = ProcessState.error;
print('loginCall:: $state');
}
}
}
class ProviderState extends ChangeNotifier {
ProcessState _state;
ProcessState get state => _state;
set state(ProcessState value) {
_state = value;
notifyListeners();
}
}