如何测试 Flutter 小部件的固有大小

Posted

技术标签:

【中文标题】如何测试 Flutter 小部件的固有大小【英文标题】:How to test a Flutter widget's intrinsic size 【发布时间】:2020-03-21 09:56:51 【问题描述】:

我有一个自定义文本小部件,我正在尝试测试该小部件对于某些文本字符串是否具有一定的内在大小。

void main() 
  testWidgets('MongolRichText has correct size for string', (WidgetTester tester) async 
    await tester.pumpWidget(MongolRichText(text: TextSpan(text: 'hello'),));

    final finder = find.byType(MongolRichText);
    expect(finder, findsOneWidget);

    // How do I check the size?
  );

如何检查小部件的固有尺寸?

我并没有像 this question 那样尝试限制屏幕大小。

我在 Flutter 源代码中找到了答案,因此我将其发布为问答对。我的答案如下。

【问题讨论】:

【参考方案1】:

WidgetTester 上有一个 getSize 方法,可用于获取小部件的渲染大小。

void main() 
  testWidgets('MongolRichText has correct size for string', (WidgetTester tester) async 
    await tester.pumpWidget(Center(child: MongolText('Hello')));

    MongolRichText text = tester.firstWidget(find.byType(MongolRichText));
    expect(text, isNotNull);

    final Size baseSize = tester.getSize(find.byType(MongolRichText));
    expect(baseSize.width, equals(30.0));
    expect(baseSize.height, equals(150.0));
  );

注意事项:

将自定义小部件放在Center 小部件中使其包装内容。否则getSize 将获得屏幕尺寸。 通过运行测试并查看实际值应该是多少,我得到了实际数字。它们看起来很合理(MongolRichText 是垂直文本),所以我用预期的数字更新了测试以使测试通过。 此解决方案改编自 Futter Text widget testing source code。

【讨论】:

以上是关于如何测试 Flutter 小部件的固有大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 小部件测试中执行缩放(捏缩放)多指手势?

如何在 Flutter 小部件测试中等待未来完成?

Flutter:在小部件测试中测试异常

如何在 Flutter 小部件中测试回调函数

在 Flutter 小部件测试中,如何验证字段验证错误消息?

Flutter - 如何在小部件测试中选择 DropdownButton 项