单元测试 firebase_auth 和 firestore

Col*_*ack 6 unit-testing firebase firebase-authentication flutter flutter-test

我正在尝试设置 flutter 脚本来测试与我的 firestore 数据库交互的类。

我目前的挣扎是:

  • 看来为了使用 firebase_auth,我必须有一个小部件树。我对 flutter 和 firebase 都很陌生,我正在通过一次构建一个类、为它们编写测试然后进入下一类来慢慢地建立我的专业知识。需要小部件树意味着我无法独立于 GUI 测试授权逻辑(例如,如果我在代码中调用signOut 两次,即使 GUI 逻辑只允许您按一次按钮,会发生什么?)。
  • 嘲笑是不够的。为了进行模拟,您需要知道测试的预期行为才能具有代表性。我花了很多时间尝试解决 future 问题、更改登录状态以及不正确的数据格式。如果我编写了模拟,它们就不会与真实函数的实际行为相匹配。
  • 模拟对我没有帮助,因为我也在学习数据库的安全规则。我的代码确实适用于宽松的安全规则,但当前的安全规则有问题。

有没有办法在不进行模拟的情况下为 firebase_auth 或 firestore 编写单元/集成测试?如果可能的话,我什至很高兴使用本地模拟器/导出我的数据库。

以下是我审阅过的一些文章,但这些文章不是我想要的:

Col*_*ack 0

根据此Github 问题,无法运行单元测试,因为需要本机 API 调用。

集成测试应该是可能的,但 Github Issue 中的页面实际上并没有给出如何运行集成测试的示例。

好吧,我想我已经找到了我要找的东西。Firebase 团队非常出色地展示了如何使用 Firebase Emulator Suite 在单元测试安全规则中测试安全规则。

我所做的是在实际的 flutter 项目目录中运行 firebase init ,这篇文章Use the Firestore Emulator with Flutter展示了如何直接在 flutter 中访问模拟器,但是现在初始化的命令是

FirebaseFirestore.instance.useFirestoreEmulator('localhost', 8080);


结合这些,我认为应该可以测试是否以正确的格式将正确的数据写入数据库,并确保返回的数据与预期相匹配,无论您是否使用 Freezed、Json Serialized 、dart:convert 等等...