Unit testing PhpSpec预期呼叫准确

Unit testing PhpSpec预期呼叫准确,unit-testing,phpspec,laravel-5,Unit Testing,Phpspec,Laravel 5,我尝试在PhpSpec中测试我的Laravel5应用程序,但它不断抛出以下错误: App/Helpers/RecurrRule 37 ! it should return a recurrence collection method call: Double\ChurchRepositoryInterface\P6->getChurchTimezone(1) was not expected. Expected

我尝试在PhpSpec中测试我的Laravel5应用程序,但它不断抛出以下错误:

App/Helpers/RecurrRule                              
37  ! it should return a recurrence collection method call:
    Double\ChurchRepositoryInterface\P6->getChurchTimezone(1) was not expected.
    Expected calls are:
    - getChurchTimeZone(exact(1))
该方法被传递一个数组,我想模拟模型的getChurchTimezone方法返回一个时区

方法:

public function __construct(Rule $rule, ArrayTransformer $arrayTransformer, ChurchRepositoryInterface $church)
{
    $this->rule = $rule;
    $this->arrayTransformer = $arrayTransformer;
    $this->church = $church;
}


public function getRecurrenceCollection($schedule)
{
    $timezone    = $this->church->getChurchTimezone($schedule['church_id']);
    // more code
}
在我的其他规范中,我经常做一些事情,比如
$double->method('someArgument')->willReturn('blah')
,但由于某种原因,这个特定的案例不起作用,我不明白为什么

我试着给它一个数组的副本,我试着直接给它一个整数,我试着把$this->church->getchurch timezone拉到它自己的方法中,并给它传递一个数组或整数,但不管PhpSpec返回的结果是什么,它都会返回一个“精确”的预期调用错误

规格:

下面是我的应用程序中其他地方使用相同方法和过程的规范的另一个示例

function it_should_return_a_one_dimensional_numeric_array_of_servers($config)
{

    $expectedResult = ['domain.com', 'domain2.com'];

    $config->get('servers')->willReturn($this->configGetReturn);
    $this->serverArray()->shouldBeArray();
    $this->serverArray()->shouldEqual($expectedResult);
}

在规范和代码中,方法名称的拼写有所不同: GetChurch时区/GetChurch时区

线索确实在错误消息中:

getChurchTimezone(1) was not expected.

Expected calls are:
- getChurchTimeZone(exact(1))
顺便说一句,您可以像这样编写let()函数,从而利用PhpSpec的一些魔力:

function let(Rule $rule, ArrayTransformer $arrayTransformer, ChurchRepositoryInterface $church)
{
    $this->beConstructedWith($rule, $arrayTransformer, $church);
}
PhpSpec会根据let()签名中的TypeHitts自动计算出预期的模拟

function let(Rule $rule, ArrayTransformer $arrayTransformer, ChurchRepositoryInterface $church)
{
    $this->beConstructedWith($rule, $arrayTransformer, $church);
}