gpt4 book ai didi

firebase - 如何在 flutter 中模拟 FirebaseApp

转载 作者:行者123 更新时间:2023-12-03 13:31:05 24 4
gpt4 key购买 nike

我正在尝试测试使用 FirebaseFirestore 的方法,但我无法模拟 FirebaseFirestore.instance 属性。
我正在关注这些例子:

  • 初始化内核:https://firebase.flutter.dev/docs/overview#initializing-flutterfire
  • 使用 firestore 插件:https://firebase.flutter.dev/docs/firestore/usage

  • 我正在为我的类(class)使用下面的代码,它运行良好,这意味着 firestoreInstance 已正确加载
    import 'package:cloud_firestore/cloud_firestore.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:flutter/material.dart';

    void main() {
    WidgetsFlutterBinding.ensureInitialized();
    runApp(
    Main(firebaseApp: Firebase.initializeApp()),
    );
    }

    class Main extends StatelessWidget {
    final Future<FirebaseApp> firebaseApp;
    const Main({this.firebaseApp});

    @override
    Widget build(BuildContext context) {
    return FutureBuilder(
    future: firebaseApp,
    builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.done) {
    final firestoreInstance = FirebaseFirestore.instanceFor(
    app: snapshot.data,
    );
    return MyWidget();
    }
    return CircularProgressIndicator();
    },
    );
    }
    }
    但是当我运行下面的测试时,我收到了消息:
    “在构建 Builder(dirty) 时抛出了以下 FirebaseException:
    [core/no-app] 没有创建 Firebase 应用“[DEFAULT]” - 调用 Firebase.initializeApp()”

    import 'package:firebase_core/firebase_core.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter_test/flutter_test.dart';
    import 'package:mockito/mockito.dart';

    class MockFirebaseApp extends Mock implements FirebaseApp {}

    void main() {
    FirebaseApp firebaseApp;

    setUp(() async {
    TestWidgetsFlutterBinding.ensureInitialized();
    firebaseApp = MockFirebaseApp();
    });

    group('Main', () {
    testWidgets('Loads my widget', (WidgetTester tester) async {
    await tester.runAsync(() async {
    await tester.pumpWidget(
    Main(firebaseApp: Future.value(firebaseApp)),
    );

    expect(find.byType(CircularProgressIndicator), findsOneWidget);
    });
    });
    });
    }

    最佳答案

    我有同样的问题。使用 this answer我找到了解决方案。

  • 复制内容:https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_auth/firebase_auth/test/mock.dart到一个文件中,您可以将其导入到您的测试中,您需要在其中初始化 Firebase 应用程序。
  • 调用 setupFirebaseAuthMocks();在您的顶部 main用于所有测试的功能。
  • 在您的 setUpAll函数,调用 await Firebase.initializeApp(); (你也可以把它放在你的 main 函数下 setupFirebaseAuthMocks(); 仍然有效)。

  • 现在你应该有一个模拟的 Firebase 应用程序。
    这是一个完整的例子:
    import 'package:flutter/material.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:flutter_test/flutter_test.dart';
    import '../lib/authentication/your_auth_using_firebase.dart';
    import './mock.dart'; // from: https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_auth/firebase_auth/test/mock.dart



    void main() {
    // TestWidgetsFlutterBinding.ensureInitialized(); Gets called in setupFirebaseAuthMocks()
    setupFirebaseAuthMocks();

    setUpAll(() async {
    await Firebase.initializeApp();
    });

    testWidgets('Your Test', (WidgetTester tester) async {
    final YourFirebaseAuthClass authService = YourFirebaseAuthClass();
    // Tests to write
    });
    }

    关于firebase - 如何在 flutter 中模拟 FirebaseApp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63662031/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com