我有一个PaginatedDataTable,它有一个带有PopupMenuButton的DataCell。 WidgetTester可以找到每个DataCell没问题,但我似乎无法引用PopupMenuButton的项目来尝试选择一个。
如何在单元测试中获取PopupMenuButton的PopupMenuItem文本?我是否正确使用await tester.pump();
来显示菜单?
以下是我现在正在做的事情:
...
expect(find.byIcon(Icons.more_horiz).first, findsOneWidget); // works!
await tester.tap(find.byIcon(Icons.more_horiz).first);
await tester.pump();
var byType = find.text('Quote');
expect(byType, findsOneWidget); // fails!
哪个失败
zero widgets with text "Quote" (ignoring offstage widgets)...
这是DataCell标记
...
new DataCell(...),
new DataCell(new PopupMenuButton<quickActions>(
icon: new Icon(Icons.more_horiz),
onSelected: (quickActions action) {
_selectContextAction(action);
},
itemBuilder: (BuildContext context) => <PopupMenuEntry<quickActions>>[
new PopupMenuItem<quickActions>(
value: quickActions.edit,
child: new Text('Edit'),
),
new PopupMenuItem<quickActions>(
value: quickActions.remove,
child: new Text('Remove'),
),
new PopupMenuItem<quickActions>(
value: quickActions.reschedule,
child: new Text('Re-schedule'),
),
new PopupMenuItem<quickActions>(
value: quickActions.bid,
child: new Text('Quote'),
),
],
))
答案 0 :(得分:1)
我知道这是一个老问题,但是我发现自己也遇到了同样的问题,并且已经解决了。
对于那些有同样问题的人,我要发布答案。我的测验与您的测验有些不同。
什么是Pump
在持续时间后触发一帧。
这使框架的行为就像应用程序变弱了一样(未选中 帧)持续一段时间,然后接收到垂直同步信号 绘制应用程序。
重复给定持续时间的泵 直到不再计划任何帧。这将在 至少一次,即使该功能为 调用,以刷新可能自己安排的所有未完成的微任务 一个框架。
//My Code
//await tester.tap(find.byIcon(Icons.text_fields));
//await tester.pumpAndSettle();
//await tester.tap(find.text(expectedFontSize + ' px'));
//expect(fontSize, expectedFontSize);
//call again if you want to do testing again or something again
//await tester.pumpAndSettle();
var mainButton = find.byIcon(Icons.more_horiz);
expect(mainButton, findsOneWidget);
await tester.tap(mainButton);
await tester.pumpAndSettle();
var childButton = find.text('Quote');
expect(childButton , findsOneWidget); //
对我来说,代码仅在调用PumpAndSettle方法之后才能起作用