gpt4 book ai didi

testing - 在 PHPSpec 中测试返回数组的内容

转载 作者:行者123 更新时间:2023-11-28 20:31:01 24 4
gpt4 key购买 nike

假设我有一个 RuleFactory 的这个方法:

public function makeFromArray($rules)
{
$array = [];
foreach ($rules as $rule) {
$array[] = new Rule($rule[0], $rule[1]);
}

return $array;
}

我想测试返回数组是否包含 Rule 元素。这是我的测试:

function it_should_create_multiple_rules_at_once()
{
$rules = [
['required', 'Please provide your first name'],
['alpha', 'Please provide a valid first name']
];

$this->makeFromArray($rules)->shouldHaveCount(2);
$this->makeFromArray($rules)[0]->shouldBeInstanceOf('Rule');
$this->makeFromArray($rules)[1]->shouldBeInstanceOf('Rule');
}

但这不起作用,它会在 PHPSpec 中抛出错误。

奇怪的是,我可以在其他返回数组的方法上很好地做到这一点,但出于某种原因我不能在这里这样做。

我得到的错误是这样的:

! it should create multiple rules at once
method [array:2] not found

如何在不创建自己的内联匹配器的情况下测试此返回数组的内容?

最佳答案

您的方法接受单个规则,而不是所有规则。规范应该是:

$this->makeFromArray($rules)->shouldHaveCount(2);
$this->makeFromArray($rules[0])[0]->shouldBeAnInstanceOf('Rule');
$this->makeFromArray($rules[1])[1]->shouldBeAnInstanceOf('Rule');

或者,为了避免多次调用:

$rules = $this->makeFromArray($rules);
$rules->shouldHaveCount(2);
$rules[0]->shouldBeAnInstanceOf('Rule');
$rules[1]->shouldBeAnInstanceOf('Rule');

不过,最具可读性的版本将是利用自定义匹配器的版本:

$rules->shouldHaveCount(2);
$rules->shouldContainOnlyInstancesOf('Rule');

关于testing - 在 PHPSpec 中测试返回数组的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25594749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com