0

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->getChurchTimezoneを独自のメソッドに引っ張って配列または整数を渡そうとしましたが、何があってもPhpSpec は常に、予想される呼び出しのエラーで「正確」に戻ってきます。

仕様:

class RecurrRuleSpec extends ObjectBehavior
{

    protected $schedule = [
        'church_id' => 1,
        'start' => '2014-11-21 10:36:07',
        'end' => '2014-11-21 11:36:07',
        'recurr_rule' => 'FREQ=WEEKLY;BYDAY=SU;',
        'recurr_until' => '2015-02-22 10:36:07',
    ];

    function it_is_initializable()
    {
        $this->shouldHaveType('App\Helpers\RecurrRule');
    }

    /**
     * Setup our mock, with doubles matching our constructor
     */
    function let($rule, $arrayTransformer, $church)
    {
        $rule->beADoubleOf('\Recurr\Rule');
        $arrayTransformer->beADoubleOf('\Recurr\Transformer\ArrayTransformer');
        $church->beADoubleOf('\App\Repositories\ChurchRepositoryInterface');

        $this->beConstructedWith($rule, $arrayTransformer, $church);
    }

    function it_should_return_a_recurrence_collection($rule, $arrayTransformer, $church)
    {
        $church->getChurchTimeZone(1)->willReturn('Europe/Dublin');
        // $church->getChurchTimeZone($this->schedule['church_id'])->willReturn('Europe/Dublin');
        // $church->getChurchTimeZone(Argument::any())->willReturn('Europe/Dublin');
        $rule->createFromString()->willReturn([]);
        $arrayTransformer->transform()->willReturn([]);


        $this->getRecurrenceCollection($this->schedule)->shouldReturn([]);
    }

これは、同じアプローチとパスを使用する私のアプリの他の場所の仕様の別の例です

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);
}
4

1 に答える 1