Тест на флаттер: Как проверить цвет фона виджета во время интеграционного теста

#flutter #flutter-test

Вопрос:

У меня есть простое приложение flutter, доступное на github, имеющее как светлые, так и темные темы с кнопкой «Переключатель тем». На главной странице у меня есть виджет Scaffold, который использует свойство цвета фона из темы. Есть ли способ проверить цвет фона каркаса до и после переключения тем во время интеграционного теста с driver помощью ?

Попытался проверить активную тему до и после переключения тем, но не смог:

  group('Theme Test', () {
    final themeButton = find.byValueKey('Button');
    final themeProvider = ThemeProvider();

    test('Switch between light and dark themes', () async {
      expect(themeProvider.mode, ThemeMode.light); //check initial theme
      await driver.tap(themeButton);
      expect(themeProvider.mode, ThemeMode.dark);  //check new theme
    });
  });
 

Полный интеграционный тест здесь

Моя цель-получить цвет фона эшафота до и после переключения тем с driver

Ответ №1:

Вы создаете новый экземпляр ThemeProvider() в своей тестовой группе. Драйвер создает ваше приложение, но не будет использовать ThemeProvider (), созданный вами в тесте.

Нелегко взаимодействовать с вашим запущенным приложением в драйвере Flutter (вам придется использовать данные запроса драйвера, но я не рекомендую этого делать для этой проблемы).

Возможно, вам захочется ознакомиться с новыми интеграционными тестами для Flutter с помощью пакета integration_test. Новые интеграционные тесты представляют собой комбинацию тестов widgetTests и тестов драйверов flutter. Более подробная информация здесь; https://flutter.dev/docs/testing/integration-tests

Новый пакет интеграционных тестов позволит взаимодействовать с экземпляром ThemeProvider (), созданным вашим приложением, если вы сделаете его доступным. Затем можно будет прочитать значение ThemeProvider.mode / проверить, изменился ли фактический цвет фона.

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

1. Большое вам спасибо! 🙏