首页 > 解决方案 > 如何对初始化 Firebase Core 的 Flutter 应用程序进行单元测试?

问题描述

我一直在尝试为一开始就初始化 Firebase Core 的 Flutter 应用程序编写单元测试。

我无法通过测试,因此我通过确保应用程序不会初始化并因此永久显示 CircularProgressIndicator 来简化测试。

但是,我什至无法通过该测试。请帮助我确定为什么测试没有发现加载微调器存在。我已经更改了我的主代码以启动并保持应用程序处于错误状态,从而显示加载微调器。我已经确认这在模拟器中有效。

    void main() {
  testWidgets('App smoke test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(App());

    // Verify that our Sign In page shows first and has content.
    expect(
      find.byWidget(CircularProgressIndicator()),
      findsOneWidget,
    );
  });
}


void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(App());
}

class App extends StatefulWidget {
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  // Set default `_initialized` and `_error` state to false
  bool _initialized = false;
  bool _error = true; //Start app in error state to always show Circular Progress Indicator.

  // Define an async function to initialize FlutterFire
  void initializeFlutterFire() async {
    try {
      // Wait for Firebase to initialize and set `_initialized` state to true
      await Firebase.initializeApp();
      setState(() {
        // _initialized = true; Commented out to keep app in error state.
      });
    } catch (e) {
      // Set `_error` state to true if Firebase initialization fails
      setState(() {
        // _error = true; 
      });
    }
  }

  @override
  void initState() {
    initializeFlutterFire();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    // Show error message if initialization failed
    if (_error) {
      return Center(child: CircularProgressIndicator());
    }

    // Show a loader until FlutterFire is initialized
    if (!_initialized) {
      return Center(child: CircularProgressIndicator());
    }

    return MyFlutterApp();
  }
}

标签: androidfirebaseflutter

解决方案


推荐阅读