如何在颤振测试中禁用对黄金图像的检查



我正试图在Flutter项目上创建CI工作流。在这些工作流程中,我必须使用flutter test运行测试。出于一些技术原因,我希望能够在某些工作流程中使用黄金图像运行测试,而在其他工作流程中,运行测试时忽略所有黄金图像检查。

有办法做到这一点吗?

您可以使用强烈推荐的黄金工具包。

正如这个答案中所描述的,您只需在test/floft_test_config.dart中创建一个具有以下内容的文件:

import 'dart:async';
import 'dart:io';
import 'package:golden_toolkit/golden_toolkit.dart';
Future<void> testExecutable(FutureOr<void> Function() testMain) async {
return GoldenToolkit.runWithConfiguration(
() async {
await loadAppFonts();
await testMain();
},
config: GoldenToolkitConfiguration(
// Currently, goldens are not generated/validated in CI for this repo.     We have settled on the goldens for this package
// being captured/validated by developers running on MacOSX. We may revisit this in the future if there is a reason to invest
// in more sophistication
skipGoldenAssertion: () => !Platform.isMacOS,
),
);
}

我提出了自己的解决方案:

  1. 我创建了一个文件test/flutter_test_config.dart,这是一个用于配置测试的特殊dart文件(请参阅flutter_test(。

  2. 我从flutter_test创建了一个TrivialComparator的副本,它总是为黄金比较返回成功。我无法重用TrivialComparator,因为构造函数是私有的(GitHub(。

  3. 我使用bool.fromEnvironment可以从命令行禁用或不禁用goldens检查。

import 'dart:async';
import 'dart:typed_data';
import 'package:flutter_test/flutter_test.dart';
/// A copy of [TrivialComparator] from flutter_test that returns a
/// trivial success.
class TrivialGoldenFileComparator implements GoldenFileComparator {
const TrivialGoldenFileComparator();
static const ignoreGoldens = bool.fromEnvironment('ignore-goldens');
@override
Future<bool> compare(Uint8List imageBytes, Uri golden) {
return Future<bool>.value(true);
}
@override
Future<void> update(Uri golden, Uint8List imageBytes) {
throw StateError('Golden files should not be updated while ignored.');
}
@override
Uri getTestUri(Uri key, int? version) {
return key;
}
}

Future<void> testExecutable(FutureOr<void> Function() testMain) async {
if (TrivialGoldenFileComparator.ignoreGoldens) {
goldenFileComparator = const TrivialGoldenFileComparator();
}
await testMain();
}

如果我运行

flutter test

金人被检查了。

如果我运行

flutter test --dart-define="ignore-goldens=true"

戈尔登夫妇被忽视了。

最新更新