Издевательский класс, не принимающий экземпляр Carbon

Я пытаюсь протестировать метод с PhpUnit и Mockery. В процессе указания метода, который должен вызываться с аргументами, мой тест не проходит.

КОНТРОЛЬНАЯ РАБОТА:

 $this->eventRepo = \Mockery::mock('Path\To\EventRepository');

 $start = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-21-00');
 $end = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-19-00');

 $this->eventRepo
        ->shouldReceive('findEvent')
        ->withArgs([
            $start,
            $end,
            '1',
            '1234567891'
        ])
        ->andReturn($callEvent);

РЕАЛЬНЫЙ КОД:

    $start = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-20-00');
    $end = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-20-00');

    $event = $this->eventRepo->findEvent(
        $start->subSeconds(60),
        $end->addSeconds(60),
        $id,
        $number
    );

ОШИБКА ИЗ ТЕСТА:

 Mockery\Exception\NoMatchingExpectationException: No matching handler found for EventRepo::findEvent(object(Carbon\Carbon), object(Carbon\Carbon), "1", "1234567891"). Either the method was unexpected or its arguments matched no expected argument list for this method

$this->eventRepo является издевательством в тесте. Настоящий код работает корректно. После отображения ошибки я предполагаю, что var_dump() является экземпляром Carbon.

Я понятия не имею, что может быть причиной этого. Я пытался гуглить, но не зная, что гуглить, сделал это довольно бесполезным. Кто-нибудь сталкивался с этим раньше?


person Dylan Buth    schedule 02.01.2015    source источник


Ответы (1)


При использовании объекта в with() или withArgs() phpunit выполняет проверку ===. Это означает, что он будет искать точно такой же экземпляр класса, а не любой экземпляр Carbon.

В данном случае это означает, что findEvent() получает экземпляр Carbon, но не тот же самый экземпляр, который у вас есть в фактическом коде.

person Webnet    schedule 02.01.2015