fkupper/module-dynamic-snapshots

为Codeception提供的动态内容快照测试

v5.0.2 2024-04-18 11:35 UTC

README

Build Status Coverage Status Total Downloads Monthly Downloads

这是一个可以与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>

注意,占位符被括号[ ]包围,从现在开始,每当应用版本更改时,快照不会中断或需要更新。

在测试中使用动态快照类

请参阅Codepcetion的快照标准文档

自定义占位符包装器

默认情况下,占位符被括号[ ]包围,但可以更改其使用的字符或字符序列。

例如,如果括号是快照数据的一部分,可以使用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,因此快照数据中的尾随空格永远不会被删除。