You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter测试遇Firebase异常:未创建默认Firebase应用求助

解决Flutter测试中Firebase未初始化的异常

你遇到的[core/no-app] No Firebase App '[DEFAULT]' has been created异常,是因为测试环境中没有初始化Firebase实例,下面提供几种可行的解决方式:

方法1:在测试中显式初始化Firebase

在测试代码运行前提前调用Firebase.initializeApp(),确保Firebase实例已创建:

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:your_app/main.dart';

void main() {
  setUpAll(() async {
    // 初始化Firebase核心
    await Firebase.initializeApp();
  });

  testWidgets('splash_test', (WidgetTester tester) async {
    await tester.pumpWidget(const MyApp());
    expect(find.byType(SvgPicture), findsWidgets);
    await tester.pump(const Duration(seconds: 2));
  });
}

如果是Web环境测试,需要额外传入Firebase配置选项:

setUpAll(() async {
  await Firebase.initializeApp(
    options: const FirebaseOptions(
      apiKey: "YOUR_API_KEY",
      authDomain: "YOUR_AUTH_DOMAIN",
      projectId: "YOUR_PROJECT_ID",
      storageBucket: "YOUR_STORAGE_BUCKET",
      messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
      appId: "YOUR_APP_ID",
    ),
  );
});

方法2:使用Firebase Mock库(推荐用于Widget测试)

通过firebase_core_mocks库模拟Firebase服务,避免依赖真实环境,更适合测试场景:

  1. 在pubspec.yaml添加开发依赖:
dev_dependencies:
  firebase_core_mocks: ^0.1.4
  1. 修改测试代码初始化Mock Firebase:
import 'package:firebase_core_mocks/firebase_core_mocks.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:your_app/main.dart';

void main() {
  setUpAll(() async {
    // 初始化Mock Firebase实例
    await MockFirebase.initializeApp();
  });

  testWidgets('splash_test', (WidgetTester tester) async {
    await tester.pumpWidget(const MyApp());
    expect(find.byType(SvgPicture), findsWidgets);
    await tester.pump(const Duration(seconds: 2));
  });
}

方法3:抽象Firebase依赖,测试时替换为模拟实现

将Firebase相关操作封装为抽象服务,测试时注入模拟实现,彻底隔离真实Firebase依赖:

比如定义抽象服务:

abstract class FirebaseService {
  // 定义业务需要的Firebase操作接口
  Future<void> init();
}

真实实现依赖Firebase:

class RealFirebaseService implements FirebaseService {
  @override
  Future<void> init() async {
    await Firebase.initializeApp();
  }
}

测试时使用模拟实现:

class MockFirebaseService implements FirebaseService {
  @override
  Future<void> init() async {
    // 模拟初始化逻辑,无实际Firebase调用
  }
}

在测试中给Widget注入MockFirebaseService,确保测试不依赖真实Firebase实例。

内容的提问来源于stack exchange,提问作者Karan Mehta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:20:03