And*_* B. 9 integration-testing flutter-test flutterdriver
我尝试将旧的 flutter 驱动程序测试迁移到新的integration_test 包。我复制了示例项目中的几乎所有内容,并在本地执行了示例项目的集成测试。这按预期工作,我能够看到应用程序 UI。但是我自己的应用程序在显示启动画面后仅以紫色显示“测试开始...”。
example_test.dart:
void main() {
group('My-App', () {
final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;
testWidgets('Tap on SkipAuthentication', (tester) async {
app.main();
await binding.traceAction(() async {
await tester.pumpAndSettle();
await Future.delayed(Duration(seconds: 5));
final fab = find.byKey(ValueKey(WidgetKeys.authenticationScreenKeys.skipAuthenticationButton));
await tester.tap(fab);
await tester.pumpAndSettle();
});
});
integration_driver.dart:
Future<void> main() async {
integrationDriver();
}
Run Code Online (Sandbox Code Playgroud)
我想通了,如果我不启动 tester.pumpWidget() 显示 Widget,我会传递给方法,但那是 WidgetTest 而不是集成测试。
我的猜测是,这是因为我的 main 函数是一个异步函数。我在旧的 flutter 驱动程序测试中也需要这个解决方法来等待第一帧。但是我不知道如何使用新的 integration_test 包来实现它。
希望您能够帮助我。
我也遇到了这个问题,并且sleep/Future.delayed不起作用。有时会运行集成测试,但大多数情况下不会运行。
最终为我解决问题的是将framePolicyof更改IntegrationTestWidgetsFlutterBinding为LiveTestWidgetsFlutterBindingFramePolicy.fullyLive. 这是一个完整的示例:
void main() {
final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized();
binding.framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.fullyLive;
testWidgets("failing test example", (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
// Start testing here...
});
}
Run Code Online (Sandbox Code Playgroud)
解决方案是从Google Codelabs找到的。
呵呵。我开始flutter_driver在假期期间转换我的测试并遇到同样的事情。
我的解决方法是在启动测试后添加固定睡眠,以使其能够正确初始化。因此,一个测试用例如下所示:
testWidgets("Main screen loads", (WidgetTester widgetTester) async {
app.main();
await sleep(Duration(seconds: 10));
await widgetTester.pumpAndSettle();
expect(find.text("What are you looking for?"), findsOneWidget);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |