synaq/mockery-extras

Mockery 框架的额外匹配工具。

1.0 2020-03-18 06:51 UTC

This package is auto-updated.

Last update: 2024-09-05 22:02:12 UTC


README

Mockery 框架的额外匹配工具。

ArrayPath

如果指定数组路径的元素包含预期的值,则匹配数组。

数组路径的语法由 mathiasgrimm/arraypath 定义。

示例

use Synaq\MockeryMatcher\ExtraMatchers;

$expectedValue = 'baz';
$arrayPath = 'foo/bar';

$dependency = Mockery::mock('DependencyOfObjectClassUnderTest');
$testSubject = new ObjectClassUnderTest($dependency);

$testSubject->performSomeAction();

$dependency->shouldHaveReceived('someMethodCallThatAcceptsAnArrayAsParameter')
    ->with(ExtraMatchers::arrayPath($expectedValue, $arrayPath))
    ->once;

上述调用将匹配如下定义的数组

$array = [
    'foo' => [
        'bar' => 'baz'
    ]
];

这些不一定是数组中的唯一元素,bar 也无需是 foo 的唯一子元素。这允许测试被构建,对传递给测试对象类依赖项的数组结构进行非常具体的断言。

JsonPath

如果给定 jsonpath 表达式标识的子节点包含预期的值,则匹配 JSON 字符串。

语法和行为源自 skyscanner/jsonpath 库。默认情况下,匹配器使用库的 SmartGet 行为,这意味着如果给定的路径没有分支,将直接返回值,而不是包含值的单个元素数组,这是通常的 jsonpath 行为。

有关使用详情,请参阅库包的文档。

示例

use Synaq\MockeryMatcher\ExtraMatchers;

$expectedValue = 'baz';
$jsonPath = '$.foo.bar';

$dependency = Mockery::mock('DependencyOfObjectClassUnderTest');
$testSubject = new ObjectClassUnderTest($dependency);

$testSubject->performSomeAction();

$dependency->shouldHaveReceived('someMethodCallThatAcceptsAJsonStringAsParameter')
    ->with(ExtraMatchers::jsonPath($expectedValue, $jsonPath))
    ->once;

上述调用将匹配以下 JSON 字符串

{
    "foo": {
        "bar": "baz"
    }
}

与 ArrayPath 匹配器类似,JSON 字符串可以编码任何其他任意数据。只要给定的 jsonpath 表达式指向预期的值,字符串就会被匹配。