如何等到 Finder 在 Flutter 集成测试中显示下一个代码执行?
Posted
技术标签:
【中文标题】如何等到 Finder 在 Flutter 集成测试中显示下一个代码执行?【英文标题】:How to wait until the Finder is visible for next code execution in Flutter integration test? 【发布时间】:2021-12-13 15:09:26 【问题描述】:信息: 我创建了一个示例 Flutter 单元测试来测试登录屏幕,其中我有电子邮件和密码作为输入字段和一个登录按钮。
要求: 需要测试虚假案例,为此,我已按照以下步骤编写代码。
-
打开 main.dart
填写了电子邮件和密码字段
onTap 事件在登录按钮上完成。此处将调用 API 并在屏幕上显示加载程序,直到 API 获得成功或失败响应。
需要检查是否显示失败对话框和消息。
问题/查询: 现在,当 API 调用时,我想等待加载器可见,直到加载器消失。所以,到目前为止,我只是手动延迟执行下一个代码,但我想让它动态化。那么,让我知道我们如何根据加载器可见性来设置动态延迟?
代码:
void main()
group('App Test', ()
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets('Login Fail Test', (WidgetTester tester) async
await app.main();
await tester.pumpAndSettle();
await tester.pump(new Duration(seconds: 2));
final emailField = find.byType(TextFormField).first;
final passwordField = find.byType(TextFormField).last;
final loginButton = find.byType(RaisedButton).first;
await tester.enterText(emailField, 'Test');
await tester.pumpAndSettle();
await tester.pump(new Duration(seconds: 1));
await tester.enterText(passwordField, 'Test123');
await tester.pumpAndSettle();
await tester.pump(new Duration(seconds: 1));
await tester.tap(loginButton);
await tester.pumpAndSettle();
await tester.pump(new Duration(seconds: 3));
final dialog = find.byType(AlertDialog).first;
await tester.element(dialog);
await tester.pumpAndSettle();
await tester.pump(new Duration(seconds: 1));
final dialogButton = find.byType(FlatButton).first;
await tester.tap(dialogButton);
await tester.pumpAndSettle();
await tester.pump(new Duration(seconds: 2));
);
【问题讨论】:
还没有官方支持,flutter SDK github.com/flutter/flutter/issues/73355 有几个问题显然到目前为止只有一个解决方法,但它没有很好地集成到测试运行器中 【参考方案1】:尝试像这样包装:
testWidgets('test',
(WidgetTester tester) async
await tester.runAsync(() async
// test code here
);
);
如果你使用:
await tester.pumpAndSettle();
然后:
final widget = find.byKey(Key('whatever'));
它会动态地找到
【讨论】:
我不想找到任何小部件或查找器。我需要等到小部件可见,而不是按持续时间进行静态延迟。以上是关于如何等到 Finder 在 Flutter 集成测试中显示下一个代码执行?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Ios 上不允许使用资源分叉、Finder 信息或类似的碎屑
iOS开发过程中 xcode文件与Finder中文件保持一致 + 支付宝集成出错
我们如何在 Flutter 中为集成测试生成 json 报告?