#flutter #integration-testing
#flutter #интеграция-тестирование
Вопрос:
Я пытаюсь собрать тест с использованием пакета integration_test, который устанавливает определенную локаль перед запуском теста. Я попробовал следующее (что близко к тому, что работает в WidgetTests):
await tester.binding.setLocale('en', 'US');
app.main();
await tester.idle();
await tester.pumpAndSettle();
// The app is still using the default locale of the phone...
Нужно ли это устанавливать в драйвере? Вот моя текущая настройка в драйвере:
// Some adb commands for granting permissions...
print('Starting test.');
final FlutterDriver driver = await FlutterDriver.connect();
final String data = await driver.requestData(
null,
timeout: const Duration(minutes: 1),
);
await driver.close();
// Some more adb commands to revoke permissions.
Похоже, это не работает.
Я нашел эту проблему здесь, но она не использует integration_test
пакет и, следовательно, имеет совершенно другую настройку.
Ответ №1:
Я смог локализовать свои интеграционные тесты, обернув мой целевой виджет в Localizations
виджет. Что-то вроде:
class WidgetTestWrapper extends StatelessWidget {
const WidgetTestWrapper({
Key? key,
required this.locale,
required this.child,
}) : super(key: key);
final Widget child;
final Locale locale;
static const localizationsDelegates = <LocalizationsDelegate>[
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
];
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Material(
child: Localizations(
locale: locale,
delegates: localizationsDelegates,
child: child,
),
),
);
}
}
Затем я передаю желаемое Locale
для теста в вызове runApp
.
Например, для испанских США (es-US):
runApp(WidgetTestWrapper(locale: const Locale('es', 'US'), child: widgetUnderTest));