sirbrillig / just-the-snaps
PHP的快照测试库
dev-master
2017-11-03 22:34 UTC
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-20 10:58:04 UTC
README
PHP的快照测试库
这个库旨在是
- 开发者的摩擦非常小。
- 测试运行器无关。
- 轻量级。
有关使用此库的PHPUnit插件的示例,请参阅phpunit-just-the-snaps。
仍在开发中!API可能会更改!
安装
composer require --dev sirbrillig/just-the-snaps
通用用法
这是如何在没有任何特定测试运行器的情况下使用JustSnaps的方法。
在这个例子中,假设我们有一个名为getData()
的函数,它返回一个数组,还有一个名为assertTrue()
的函数,如果其表达式不是true
,则会抛出异常。
$actual = getData(); $asserter = \JustSnaps\buildSnapshotAsserter('./tests/__snapshots__'); assertTrue($asserter->forTest('testThatFooIsBar')->assertMatchesSnapshot($actual));
第一次运行此代码时,将抛出CreatedSnapshotException
,并序列化要测试的数据($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()
传递。
以下是一个使用自定义序列化器隐藏敏感信息的示例。
$actual = [ 'foo' => 'bar', 'secret' => 'thisisasecretpassword' ]; $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']); } }; $serializer = new Serializer($tester, $printer); $asserter = \JustSnaps\buildSnapshotAsserter('./tests/__snapshots__'); $asserter->addSerializer($serializer); assertTrue($asserter->forTest('testThatFooIsBar')->assertMatchesSnapshot($actual));