brianegan / brianegan/flutter_architecture_samples
[TEST] NoSuchMethodError: The getter 'uid' was called on null. Receiver: null Tried calling: uid
- Dominant language
- Dart
- Stars
- 8.9k
- Forks
- 1.7k
- PR merge metrics
- No merged PRs in 30d
Description
I've tried fixing using MockFirebaseAuth.instance by defining get in MockFirebaseAuth + initializing FirebaseApp with TestWidgetsFlutterBinding.
Problem code posted below...
`firebase_flutter_repository_test.dart`:
```
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_flutter_repository/firebase_user_repository.dart';
import 'package:custom_repository_core/custom_repository_core.dart';
import 'package:mockito/mockito.dart';
import 'package:test/test.dart';
void main() {
group('FirebaseUserRepository', () {
test('should log the user in anonymously', () async {
final auth = MockFirebaseAuth();
final repository = FirebaseUserRepository(auth);
when(auth.signInAnonymously())
.thenAnswer((_) => Future.value(MockUserCredential()));
final entity = await repository.login();
expect(entity, TypeMatcher());
});
});
}
class MockFirebaseAuth extends Mock implements FirebaseAuth {}
class MockFirestore extends Mock implements FirebaseFirestore {}
class MockUserCredential extends Mock implements UserCredential {}
```
`firebase_user_repository.dart`:
```
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:custom_repository_core/custom_repository_core.dart';
class FirebaseUserRepository implements UserRepository {
final FirebaseAuth auth;
const FirebaseUserRepository(this.auth);
@override
Future login() async {
final firebaseUser = await auth.signInAnonymously();
return UserEntity(
id: firebaseUser.user.uid, /// firebaseUser.user shows up as null
displayName: firebaseUser.user.displayName,
);
}
}
```
`pubspec.yaml`
```
environment:
sdk: '>=2.0.0 <3.0.0'
dependencies:
flutter:
sdk: flutter
custom_repository_core:
path: ../custom_repository_core
firebase_auth: ^1.1.3
cloud_firestore: ^2.0.0
dev_dependencies:
test:
mockito:
flutter_test:
sdk: flutter
flutter:
```
Contributor guide
Research direction
Start by running the test in firebase_flutter_repository_test.dart and inspect FirebaseUserRepository.login in firebase_user_repository.dart. Follow the mocked signInAnonymously result through firebaseUser.user and the uid access. Done means the anonymous-login test completes without the null getter error and still produces a UserEntity.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart, firebase, flutter
- Domain
- backend, testing-qa
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100