0

我需要测试下面的代码来检查是否trailingIconButton == null应该应用某个文本主题。

Text(
                    type == TileType.org
                        ? orgInfo!.name!
                        : type == TileType.user
                            ? '${userInfo!.firstName!} ${userInfo!.lastName!}'
                            : option!.title,
                    style: type == TileType.org
                        ? Theme.of(context).textTheme.headline5
                        : type == TileType.user
                            ? Theme.of(context).textTheme.headline6
                            : option!.trailingIconButton == null
                                ? Theme.of(context).textTheme.bodyText2
                                : Theme.of(context)
                                    .textTheme
                                    .headline5!
                                    .copyWith(fontSize: 18),
                    key: const Key('trailingIconButton'),
                  ),

我写的

testWidgets('Creating Custom List (giving custom options)', (tester) async {
      await tester.pumpWidget(createCustomListTileUser(
          option: Options(
              icon: const Icon(Icons.add),
              title: 'henlo',
              subtitle: 'yesh',
              trailingIconButton: null)));
      final Text text =
          tester.firstWidget(find.byKey(const Key('trailingIconButton')));
      //equals bodyText2
      expect(text.style!.getTextStyle(),
          equals(Theme.of(MockBuildContext()).textTheme.bodyText2));
    });
4

1 回答 1

0

问题是您使用不同的上下文来获取导致不同主题的主题。在您的应用程序中,您可能已经定义了Theme在使用时返回的 a,Theme.of(context)但在您的测试中并非如此。当你在做Theme.of(MockBuildContext())你得到不同的一个。

因此,要解决这个问题,您需要使用与您的应用程序中使用的主题相同的主题提供程序来包装您的小部件。然后使用此代码比较主题:

expect(
    text.style!.getTextStyle(),
    equals(Theme.of(
            tester.element(find.byKey(const Key('trailingIconButton'))))
        .textTheme
        .bodyText2));
于 2022-02-03T18:38:35.207 回答