firebase - Flutter:通过存储库对 Firebase Firestore 进行单元测试

标签 firebase flutter google-cloud-firestore flutter-test

我有一个目的来测试我的 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()部分中缺少什么?

最佳答案

出现错误是因为您使用的对象未扩展 Mock来自 mockito 的类(class)包所在when函数来自。

您可以在单独的 util 类中编写 Firestore 逻辑并模拟该类并对其进行测试。

关于firebase - Flutter:通过存储库对 Firebase Firestore 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68593688/

相关文章:

ionic-framework - ionic : Authentication not persistent when merging to firebase v3

javascript - 如何在不再次调用 db.collection 的情况下获取文档并编辑数据?

java - 如何在 firebase 加载时放置进度对话框?

java - 在回调中上传两个文件到 firebase 但无法获取这两个文件的DownloadUrl

flutter - 如何更改 FLUTTER DropdownMenuItem 的 textDirection(更改小部件方向)

json - 抛出另一个异常 : HttpException: Connection closed while receiving data, uri =

dart - flutter 图像着色

ios - 在 Xcode 版本 11.5 (11E608c) 中为 Release模式构建时找不到“FirebaseCore/FirebaseCore.h”文件

java - 如何在应用程序启动时使用 recyclerview 加载 fragment ?

android - Firestore级联删除具有相同已删除ID的每个项目