首页 > 解决方案 > 如何在 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 中有什么更优雅的方式来断言列表项的内容和所有项的顺序?

标签: fluttertestingdart

解决方案


使用我的解决方案,您可以检查特定位置的 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);
}

推荐阅读