MissingPluginException(在通道 plugins.flutter.io/firebase_core 上找不到方法 Firebase#initializeCore 的实现)在测试中

chs*_*nch 9 firebase flutter flutter-test

我们正在使用新版本的 FlutterFire,但在运行测试时遇到了一些问题,我们设法初始化 Firebase,添加以下内容:

setUp(() async {
    TestWidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
  });
Run Code Online (Sandbox Code Playgroud)

但是现在我们有这个错误信息:

MissingPluginException(No implementation found for method Firebase#initializeCore on channel plugins.flutter.io/firebase_core)
  package:flutter/src/services/platform_channel.dart 159:7  MethodChannel._invokeMethod
Run Code Online (Sandbox Code Playgroud)

该应用程序在 iOS 和 Android 上都运行良好,只有在运行小部件测试时才会出现问题。我们已经尝试过 Flutter 稳定版和开发版频道。

cro*_*x5f 6

我假设您正在执行单元测试或小部件测试。只需看看插件本身是如何测试的

class FakeFirebaseAppPlatform extends Fake implements FirebaseAppPlatform {}

他们只是伪造这个物体。

为什么?因为这个插件是使用方法通道实现的,并且在测试时您无权访问本机平台。您唯一的选择是模拟或伪造与 Firebase 的交互:

  1. 正如该插件的作者正在使用 Mockito 所做的那样

  2. 模拟方法通道,如本答案所示,(在我看来,这更麻烦,如果您自己开发插件,则最适合)

  • 很好的答案只是补充一点,flutter fire 确实在他们自己的文档中提到了这一点 https://firebase.flutter.dev/docs/testing/testing/ (2认同)