如何在Flutter黄金测试上检查字体文本

时间:2019-11-29 12:10:48

标签: testing flutter

我正在为垂直的蒙古文文字制作package。我有一个需要特殊字体才能显示的自定义小部件。我正在尝试编写一个显示蒙古文字已正确呈现的测试。

在模拟器上,它看起来像这样:

但是金色文件看起来像这样:

如果黄金测试只是给我豆腐,我无法验证蒙古人的渲染正确。

这是我的测试

testWidgets('MongolText renders font', (WidgetTester tester) async {

  await tester.pumpWidget(
    MaterialApp(
      home: Scaffold(
          appBar: AppBar(title: Text('My App')),
          body: Stack(
            children: <Widget>[
              Center(
                child: MongolText('ᠮᠣᠩᠭᠣᠯ'),
              ),
            ],
          )
      ),
    ),
  );

  await tester.pumpAndSettle();

  await expectLater(
    find.byType(MaterialApp),
    matchesGoldenFile('golden-file.png'),
  );
});

有什么办法可以解决这个问题?

我已经阅读了这两篇有关黄金测试的文章:

3 个答案:

答案 0 :(得分:3)

颤振测试目前仅支持一种字体,嗯。

从eBay试用以下软件包:https://pub.dev/packages/golden_toolkit

答案 1 :(得分:1)

答案 2 :(得分:1)

从包的 0.2.0-dev 版本开始,您可以访问方法 loadAppFonts() 以自动从 pubspec.yaml 或您的项目依赖的任何包加载字体资源。

source

<块引用>

0.2.0-dev

改进了加载字体资源的机制。消费者不再 需要提供一个目录来读取 .ttf 文件。

他们现在可以简单地调用:await loadAppFonts() 并且包将 自动从其 pubspec.yaml 或任何字体资源加载任何字体资源 他们依赖的包。

现在您的测试可能如下所示:

testWidgets('Text renders', (tester) async {
  // Load fonts
  await loadAppFonts();

  // Pump your test widget
  await tester.pumpWidget(
    MaterialApp(
      home: Scaffold(
        body: Text('My text'),
      ),
    ),
  );

  // Compare image file
  await screenMatchesGolden(tester, 'golden-file');
});