sirbrillig / phpunit-just-the-snaps
PHPUnit 的轻量级快照测试插件
dev-master
2017-11-02 23:56 UTC
Requires
- sirbrillig/just-the-snaps: dev-master
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-20 10:47:43 UTC
README
PHPUnit 的快照测试库
使用通用的快照库 just-the-snaps.
仍在开发中!API 可能会更改!
安装
composer require --dev sirbrillig/phpunit-just-the-snaps
用法
在您的测试类中包含 trait SnapshotAsserter
以获取该包的方法。
use PHPUnitJustSnaps\SnapshotAsserter; class MyTest extends \PHPUnit\Framework\TestCase { use SnapshotAsserter; }
在此示例中,假设我们有一个名为 getData()
的函数,它返回一个数组。
public function testDataHasNotChanged() { $actual = getData(); $this->assertMatchesSnapshot($actual); }
首次运行此代码时,测试将被标记为“跳过”,并且要测试的数据($actual
)将被序列化到文件 tests/__snapshots__/testThatFooIsBar.snap
中。
第二次(以及所有后续的运行)此代码时,它将比较要测试的数据与快照文件的内容,并根据它们是否相同返回 true 或 false。
这将保护 getData()
中的任何回归。
如果 getData()
的结果有 故意 的变化,则可以通过简单地删除快照文件来“重置”测试。下次运行测试时,它将按上述方式重新创建它。
序列化器
JustSnaps 将在将数据写入快照文件之前对任何数据进行 json_encode()
编码。如果您的数据在写入之前需要一些处理,您可以创建自定义序列化器。
每个序列化器由两个对象组成
- 一个实现了
SerializerTester
的类,该类有一个函数:shouldSerialize(mixed $data): bool
。如果序列化器应该修改数据,则此函数必须返回 true。 - 一个实现了
SerializerPrinter
的类,该类有一个函数:serializeData(mixed $data): mixed
。此函数可以修改数据,然后必须返回将写入快照文件的新数据。请注意,从serializeData()
返回的数据将在写入之前通过json_encode()
传递。注意,从serializeData()
返回的数据将在写入之前通过json_encode()
传递。
以下是一个使用自定义序列化器隐藏敏感信息的示例。
use JustSnaps\SerializerPrinter; use JustSnaps\SerializerTester; use JustSnaps\Serializer; public function addSecretSerializer() { $printer = new class implements SerializerPrinter { public function serializeData($outputData) { $outputData['secret'] = 'xxx'; return $outputData; } }; $tester = new class implements SerializerTester { public function shouldSerialize($outputData): bool { return is_array($outputData) && isset($outputData['secret']); } }; $this->addSnapshotSerializer(new Serializer($tester, $printer)); } public function testDataHasNotChanged() { $actual = [ 'foo' => 'bar', 'secret' => 'thisisasecretpassword' ]; $this->addSecretSerializer(); $this->assertMatchesSnapshot($actual); }