flutter - 如何在 Flutter/Dart 中测试多个列表项的顺序?
问题描述
介绍
我们有一个ListView
名为 OrganizationList,其中包含ListTile
每个项目的小部件。我们使用一个Text
小部件来显示ListTile
.
我们想测试组织名称是否以正确的顺序正确显示。
我们目前的解决方案
我们有以下断言:
var organizationA = find
.descendant(
of: find.byType(OrganizationList),
matching: find.byKey(
Key('0'),
),
)
.evaluate()
.first
.widget as Text;
expect(textOrganization.data, 'organization-a');
var organizationB = find
.descendant(
of: find.byType(OrganizationList),
matching: find.byKey(
Key('1'),
),
)
.evaluate()
.first
.widget as Text;
expect(textOrganization.data, 'organization-b');
如果为列表项显示正确的标签,这感觉像是一种非常麻烦的测试方式。但我找不到更优雅的方式。
问题
在 Flutter / Dart 中有什么更优雅的方式来断言列表项的内容和所有项的顺序?
解决方案
使用我的解决方案,您可以检查特定位置的 ListItemWidget 和文本是否可见(或不可见):
void checkPosition(int index, SomeObj obj, {bool isOnPosition = true}) {
final listItemFinder = find.byType(ListItemWidget);
final listItem = listItemFinder.evaluate().isEmpty
? null
: listItemFinder.at(index);
if (listItem == null) {
if (isOnPosition) {
fail('List not found');
}
return;
}
final positionText = find.text(obj.text);
expect(find.descendant(of: listItem, matching: positionText),
isOnPosition ? findsOneWidget : findsNothing);
}
推荐阅读
- xml - xslt:在 xsltproc 中添加子元素会破坏格式
- dataframe - 选择具有缺失值的 Julia DataFrame 的数值列
- django - Django 保存 modelformset_factory
- php - 如何在树枝模板中创建语言选择
- jupyter-notebook - 尝试在 Windows 上使用 NBconvert(转 PDF)时缺少 XeLateX
- python - 表情符号转换器使用 python - (\ud83d\udc40) 到实际的表情符号
- java - 正则表达式:如何用 n 次出现的子字符串替换字符串
- string - 如果在没有 java API 的情况下使用字符串文字会发生什么?
- servicestack - 使用 ServiceStack.OrmLite.SqlServer.Converters 后的 ASP.NET API 异常
- c - 我应该在 scanf() 中同时包含 fflush(stdin) 和一个空格,还是只包含其中一个就足够了?