快照测试

快照测试是一种通过将给定的预期值与先前存储的相同值的快照进行比较来测试代码的好方法。当您希望确保代码不会意外更改其输出时,这很有用。

例如,假设您有一个来自 API 的字符串响应。您可以使用快照测试来确保响应不会意外更改。

1it('has a contact page', function () {
2 $response = $this->get('/contact');
3 
4 expect($response)->toMatchSnapshot();
5});

第一次运行此测试时,它将在 tests/.pest/snapshots 中创建一个包含响应内容的快照文件。下次运行测试时,它会将响应与快照文件进行比较。如果响应不同,则测试将失败。如果响应相同,则测试将通过。

此外,给定的预期值不必是响应;它可以是任何东西。例如,您可以对数组进行快照

1$array = /** Fetch array somewhere */;
2 
3expect($array)->toMatchSnapshot();

当然,您可以随时使用 --update-snapshots 选项“重建”快照

1./vendor/bin/pest --update-snapshots

处理动态数据

有时,预期值可能包含无法控制的动态数据,例如表单中的 CSRF 令牌。在这些情况下,您可以使用 断言管道 来替换这些数据。这是一个示例

1expect()->pipe('toMatchSnapshot', function (Closure $next) {
2 if (is_string($this->value)) {
3 $this->value = preg_replace(
4 '/name="_token" value=".*"/',
5 'name="_token" value="my_test"',
6 $this->value
7 );
8 }
9 
10 return $next();
11});

在本章中,我们看到了快照测试的强大功能。在下一章中,我们将深入探讨 Pest 的自定义助手:自定义助手