Как протестировать приложение Flutter с помощью Firebase?

# #firebase #flutter #unit-testing #testing #google-cloud-firestore

Вопрос:

Я использую Flutter и Firebase в качестве своей базы данных. Я хочу провести некоторый модульный тест своего приложения, но когда я начну этот тест :

 testWidgets('MyWidget has a title and message', (WidgetTester tester) async {
    // Create the widget by telling the tester to build it.
    await tester.pumpWidget(LoginPage());

    expect(true, true);
});
 

У меня есть Исключение :

Приложение Firebase «[ПО УМОЛЧАНИЮ]» не создано — вызовите Firebase.initializeApp()

Но Firebase.initializeApp() вызывается в моем main.dart здесь :

 Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}
 

И я не знаю, как инициализировать приложение Firebase в моем тесте.

Комментарии:

1. Проверьте этот документ flutterfire, в котором показано, как можно имитировать и тестировать службы Firebase

Ответ №1:

Публикую это как вики-страницу сообщества, поскольку она основана на комментарии @GuilhermeGabanelli.

Если вы проверите эту документацию flutterfire о том, как выполнять модульные тесты с помощью служб Firebase, вы увидите, что:

Библиотеки Firebase должны запускаться на реальном устройстве или эмуляторе. Поэтому, если вы хотите запускать модульные тесты, вам придется вместо этого использовать подделки. Подделка-это библиотека, которая реализует API данной библиотеки Firebase и имитирует ее поведение.

При инициализации приложения вместо передачи фактического экземпляра библиотеки Firebase (например, FirebaseFirestore.экземпляр при использовании Firestore) вы передаете экземпляр подделки (например, FakeFirebaseFirestore()). Тогда остальная часть вашего приложения будет работать так, как если бы оно разговаривало с Firebase.

Далее следует пример с образцом кода. Я считаю, что это причина проблемы, с которой вы столкнулись, и если вы измените свой код, чтобы использовать подделки, это должно быть исправлено.