brianegan / brianegan/flutter_architecture_samples

[TEST] NoSuchMethodError: The getter 'uid' was called on null. Receiver: null Tried calling: uid

Open
#203 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.