【问题标题】:Flutter Widget Test gives me this error: No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()Flutter Widget 测试给我这个错误:No Firebase App \'[DEFAULT]\' has been created - call Firebase.initializeApp()
【发布时间】:2023-02-02 22:09:34
【问题描述】:

我是写作新手小部件测试用例在 Flutter 中,当我尝试为使用的模块编写测试用例时,我发现有关 Flutter 测试的资源非常少Firestore它给出了以下错误:没有创建 Firebase 应用“[DEFAULT]” - 调用 Firebase.initializeApp()- 错误 1

MapsBloc 的 MapsRepository 正在使用 Firestore 获取数据

我尝试了很多示例,下面的代码可以正常工作,但会出现另一个错误:FirebaseCoreHostApi.initializeCore PlatformException(通道错误,无法在通道上建立连接。,null,null)- 此处未观察到错误 1

测试文件

void main() async{
  TestWidgetsFlutterBinding.ensureInitialized();
  //WidgetsFlutterBinding.ensureInitialized();

  setUpAll(() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp(
      options: DefaultFirebaseOptions.currentPlatform,
    ); // setupall method is eliminated Error 1

  });
  
  testWidgets('Form Widget Test', (tester) async {

    await tester.pumpWidget(initApp());
    await tester.pumpAndSettle();
    await tester.pump(const Duration(seconds: 2));

    // Create the Finders.
    final stack = find.byType(Stack);

    // Create the Matchers
    expect(stack, findsWidgets);

  });
}
Widget initApp() {

  MapsRepository mapsRepository = MapsRepository();
  MapsBloc mapsBloc = MapsBloc();
  MyMaps myMaps = const MyMaps();

  return EasyLocalization(
    supportedLocales: const [Locale('en', 'US'), Locale('hi', 'IN')],
    path: 'assets/translations',
    fallbackLocale: const Locale('en', 'US'),
    child: MultiProvider(
      providers: [
        BlocProvider<MapsBloc>.value(
          value: mapsBloc,
          child: myMaps,
        ),
      ],
      child: const MyApp(),
    ),
  );
}

我在这里缺少的是,相同的结构适用于其他测试文件。一些测试文件正在通过测试用例,一些正在抛出错误

我试过像下面这样打印

await Firebase.initializeApp(
      options: DefaultFirebaseOptions.currentPlatform,
    ).whenComplete(() => print("completed init"));

这也不起作用。任何工作示例都会非常有帮助。谢谢

【问题讨论】:

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


    【解决方案1】:

    您没有在第一个代码示例中调用 setUpAll,因此永远不会执行其中的 initializeApp 调用。

    main 函数中初始化 Firebase 的正确方法是:

    void main() async{
      TestWidgetsFlutterBinding.ensureInitialized();
    
      WidgetsFlutterBinding.ensureInitialized();
      await Firebase.initializeApp(
        options: DefaultFirebaseOptions.currentPlatform,
      );
      
      ...
    }
    

    main 中调用 await 没有什么坏处,因为 initializeApp 直接在应用程序本身中运行,并且几乎立即完成(这不是网络调用)。

    【讨论】:

      猜你喜欢
      • 2023-02-09
      • 2021-12-31
      • 2021-09-09
      • 2021-12-16
      • 1970-01-01
      • 2021-05-13
      • 2021-08-24
      • 2021-08-27
      • 1970-01-01
      相关资源
      最近更新 更多