我有一个目的来测试我的 Firestore 存储库方法。我发现了一个有用的fake_cloud_firestore包,这有助于模拟 firestore。
我有一个想要测试的存储库方法:
@override
Future<Either<UserFailure, UserDTO>> updateUser(FUser user) async {
try {
final UserDTO userDTO = UserDTO.fromDomainForUpdatingProfile(user);
final Map<String, dynamic> userJson = userDTO.toJson();
await _firestore
.collection(FirestoreCollections.COLLECTION_USERS)
.doc(user.id)
.set(userJson, SetOptions(merge: true));
return right(userDTO);
} on FirebaseException catch (e) {
if (e.message!.contains('PERMISSION_DENIED')) {
return left(const UserFailure.insufficientPermission());
} else {
return left(const UserFailure.unexpected());
}
} on Exception {
return left(const UserFailure.unexpected());
}
}
还有一个测试:
test('exception test', () async {
final Map<String, dynamic> jsonMap = json.decode(
fixture("user/full_domain_fuser.json"),
);
final FUser fuser = FUser.fromJson(jsonMap);
final userJson = UserDTO.fromDomainForUpdatingProfile(fuser).toJson();
when(fakeFirebaseFirestore
.collection(FirestoreCollections.COLLECTION_USERS)
.doc(fuser.id)
.set(userJson, SetOptions(merge: true)))
.thenThrow(Exception());
final result = await userRepository.updateUser(fuser);
expect(result, const Left(UserFailure));
});
});
我想要做的是在调用Firestore并更新文档时抛出异常,但是when()部分没有被触发。运行测试时我得到:
Bad state: No method stub was called from within `when()`. Was a real method called, or perhaps an extension method?
FakeFirebaseFirestore 和 UserRepository 构建:
FakeFirebaseFirestore fakeFirebaseFirestore = FakeFirebaseFirestore();
UserRepository userRepository = UserRepository(fakeFirebaseFirestore);
看起来我的 firestore 调用在测试和存储库方法中看起来是一样的。我在这个when()部分中缺少什么?
最佳答案
关于firebase - Flutter:通过存储库对 Firebase Firestore 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68593688/