2015-01-02 2 views
0

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

ТЕСТ:

$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.

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

ответ

1

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

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

Смежные вопросы