Flutter 集成测试:在第二个屏幕上失败
Flutter Integration Test: Fails on second screen
我编写了一个基本的集成测试,但在运行时遇到了问题。
基本上我有一个带有 ÌconButton
的主屏幕。如果单击它会打开一个辅助屏幕。
我的测试是这样的:
group('end-to-end test', () {
testWidgets('test settings', (WidgetTester tester) async {
appmain.main();
await tester.pumpAndSettle();
final Finder settingButton = find.byTooltip('Settings');
// Button is fine
expect(settingButton, findsOneWidget);
// Button is tapped -- a new screen should open
await tester.tap(settingButton);
// "Host" should be on the second screen, HOWEVER this test FAILS
expect(find.text("Host"), findsWidgets);
});
});
所以问题是:如果 Button 被成功点击,为什么测试仍然失败?
事实证明,如果您在集成测试中点击 ÌconButton
,仍然会有一个动画——就像您在生产中点击按钮一样。因为动画还在继续,所以测试 expect(find.text("Host"), findsWidgets)
失败了,因为它找不到任何东西。解决方法是等待动画完成,方法是在调用失败的行之前调用await tester.pumpAndSettle()
。
旁注: 我也尝试使用 press
而不是 tap
但这只会导致新问题因为 press
在移动应用程序的环境中有所不同。您很可能想使用 tap
.
我编写了一个基本的集成测试,但在运行时遇到了问题。
基本上我有一个带有 ÌconButton
的主屏幕。如果单击它会打开一个辅助屏幕。
我的测试是这样的:
group('end-to-end test', () {
testWidgets('test settings', (WidgetTester tester) async {
appmain.main();
await tester.pumpAndSettle();
final Finder settingButton = find.byTooltip('Settings');
// Button is fine
expect(settingButton, findsOneWidget);
// Button is tapped -- a new screen should open
await tester.tap(settingButton);
// "Host" should be on the second screen, HOWEVER this test FAILS
expect(find.text("Host"), findsWidgets);
});
});
所以问题是:如果 Button 被成功点击,为什么测试仍然失败?
事实证明,如果您在集成测试中点击 ÌconButton
,仍然会有一个动画——就像您在生产中点击按钮一样。因为动画还在继续,所以测试 expect(find.text("Host"), findsWidgets)
失败了,因为它找不到任何东西。解决方法是等待动画完成,方法是在调用失败的行之前调用await tester.pumpAndSettle()
。
旁注: 我也尝试使用 press
而不是 tap
但这只会导致新问题因为 press
在移动应用程序的环境中有所不同。您很可能想使用 tap
.