fkupper / module-dynamic-snapshots
为Codeception提供的动态内容快照测试
Requires
- php: ^8.0.|^8.1|^8.2
- codeception/codeception: ^5.0
Requires (Dev)
- mockery/mockery: ^1.5
- php-coveralls/php-coveralls: ^2.5
- squizlabs/php_codesniffer: ^3.7
- vimeo/psalm: ^4.27
This package is auto-updated.
Last update: 2024-09-23 08:16:03 UTC
README
这是一个可以与Codeception一起使用的模块,用于测试包含动态数据的快照。
安装
使用composer
composer require "fkupper/module-dynamic-snapshots"
在你的codeception.yml
文件中添加以下内容
extensions: commands: - Fkupper\Command\GenerateDynamicSnapshot
使用方法
创建快照
可以使用此包中的自定义命令通过codeception客户端创建新的快照。例如:
php ./vendor/bin/codecept generate:dynamicsnapshot Acceptance Products
获取动态快照数据
与纯Codeception快照类似,DynamicSnapshots类将通过fetchDynamicData
方法获取数据。因此,在你的快照中,你必须实现此方法。
class FooSnapshot extends DynamicSnapshot { /** * @var Tester */ protected $tester; public function fetchDynamicData() { // fetch snapshot from a helper method or snomething and return return $this->tester->fetchDataFromSomewhere(); } }
替换
这是此包的主要功能。当处理快照中的可变数据时,可以将它们替换为占位符,并在每次执行快照测试时替换回来。
例如,如果你想要测试一个包含静态数据和可变数据的XML API响应
<xml> <appVersion value="v8.8.9" /> <someOtherNonDynamicData value="foo" /> <bar value="baz" /> </xml>
属性"appVersion"
可能随时改变,为了避免每次都更新它,使用setSubstitutions
方法将其替换为所选的字符串(或可以转换为字符串的值)。
class FooSnapshot extends DynamicSnapshot { /** * @var Tester */ protected $tester; public function fetchDynamicData() { $this->setSubstitutions( // $this->tester->getAppVersion() returns "v8.8.9" 'app_version' => $this->tester->getAppVersion() ); // fetch snapshot from a helper method or snomething and return return $this->tester->fetchDataFromXml(); } }
第一次执行动态快照测试时,将创建一个类似以下内容的快照data
文件:
<xml> <appVersion value="[snapshot_app_version]" /> <someOtherNonDynamicData value="foo" /> <bar value="baz" /> </xml>
注意,占位符被括号[ ]
包围,从现在开始,每当应用版本更改时,快照不会中断或需要更新。
在测试中使用动态快照类
自定义占位符包装器
默认情况下,占位符被括号[ ]
包围,但可以更改其使用的字符或字符序列。
例如,如果括号是快照数据的一部分,可以使用setWrappers
将其更改为其他内容。
class FooSnapshot extends DynamicSnapshot { protected $tester; public function __constructor(Tester $I) { $this->tester = $I; $this->setWrappers('{', '}'); // $this->setWrappers('(', ')'); // $this->setWrappers('<', '>'); } }
忽略快照数据的一部分
如果你的快照包含无法测试或你想要忽略的可变数据,可以提供要从中删除数据的正则表达式模式列表。
例如,在以下快照数据中,favicon href属性中的当前时间戳必须忽略。
<html> <head> <!-- the favicon will always have the current timestamp suffix --> <link rel="shortcut icon" href="/favicon.ico?v=1588930951"> </head> </html>
因此,你可以通过从快照对象中调用setIgnoredLinesPatterns
来忽略此行。
$this->setIgnoredLinesPatterns(['/^.*favicon.*$/m']);
处理空格序列
有时,快照数据中可能有无法控制的、可变数量的空格字符序列。
要切换快照行为以忽略这些空格或不禁用,请使用shouldAllowSpaceSequences(true|false)
。将其设置为true将压缩这些空格序列为单个空格字符。
请注意,默认值为true
,因此如果未指定,这些序列永远不会减少为一个空格。
处理尾随空格
如果你想要清除快照数据中每行的尾随空格,请使用shouldAllowTrailingSpaces(false)
。
请注意,默认值为true
,因此快照数据中的尾随空格永远不会被删除。