testing - Codeception 添加新的 JsonTypes

标签 testing codeception web-api-testing

我想知道是否可以通过 seeResponseMatchesJsonType 方法为验证 API 响应定义一些自定义 JsonType。我的意思是,假设我有一个结构的响应:

[
   'id' => 'integer',
   'name' => 'string',
   'address' => [
      'street' => 'string',
      'city' => 'string'
   ]
]

显然这个结构嵌入了复杂类型 address 并且在整个应用程序中这种类型可能会被多次使用所以我想简单地写一下:

$I->seeResponseMatchesJsonType([
   'id' => 'integer',
   'name' => 'string',
   'address' => 'addressType'
]);

无需一直重写这个嵌入式结构。我如何在 Codeception 中实现它?

最佳答案

是的,您可以使用\Codeception\Util\JsonType 类中的方法 addCustomFilter 来执行此操作。

/**
     * Adds custom filter to JsonType list.
     * You should specify a name and parameters of a filter.
     *
     * Example:
     *
     * ```php
     * <?php
     * JsonType::addCustomFilter('email', function($value) {
     *     return strpos('@', $value) !== false;
     * });
     * // => use it as 'string:email'

     *
     * // add custom function to matcher with `len($val)` syntax
     * // parameter matching patterns should be valid regex and start with `/` char
     * JsonType::addCustomFilter('/len\((.*?)\)/', function($value, $len) {
     *   return strlen($value) == $len;
     * });
     * // use it as 'string:len(5)'
     * ?>
     * ```
     *
     * @param $name
     * @param callable $callable
     */
    public static function addCustomFilter($name, callable $callable)
    {
        static::$customFilters[$name] = $callable;
    }

关于testing - Codeception 添加新的 JsonTypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43931250/

相关文章:

ios - IMagePicker View 的 KIF 2.2 测试用例不适用于 iOS 7

php - Laravel 5/Codeception 未正确路由

php - yii2 单元测试在 null 上调用成员函数 getDb() 时出错

json - 使用 REST Assured,我如何检查一个字段是否存在于 json 对象类型的响应数组中?

Karate JDBC 连接

javascript - 开 Jest 期望之后的一切都没有被调用

Android Espresso - 如果未选中,请单击复选框

python - TestCase 类中的 setUpClass、setUpTestData 和 setUp 有什么区别?

php - 如何使用 Codeception 将鼠标悬停在元素上?

Java:org.json.JSONObject - 创建新实例会删除大小数中的尾随零