2013-12-03 4 views
1

Я пытаюсь создать Осмеяние CustomObject затем цепь извлечение OtherObject на него, используя что-то идентичноеMocking модели с отношениями в Laravel

$this->CustomObject->with('OtherObject')->get(); 

Я не могу показаться, чтобы выяснить, как издеваются это ->get() в конце там. Я издеваюсь над обоими моделями в моем методе конструктора ['Eloquent', 'OtherObject', 'CustomObject']. Если я удалю ->get(), все пройдет гладко и мои тесты пройдут (помимо ошибок php, которые мне дают представление, но это не имеет значения, правильно ли работает тест).

То, что я в настоящее время это:

$this->mock->shouldReceive('with')->once()->with('OtherObject'); 
$this->app->instance('CustomObject', $this->mock); 

Что я должен делать, чтобы издеваться над этим?

Редактировать: Я специально пытался ->andReturn($this->mock), который только говорит мне, что на издеваемом объекте нет метода get.

ответ

2

Вы должны вернуть экземпляр вашего издеваться, чтобы сделать следующий СЦЕПЛЕНИЕ вызов (->get()) работать

$this->mock 
    ->shouldReceive('with') 
    ->once() 
    ->with('OtherObject') 
    ->andReturn($this->mock); 
+0

Я попытался конкретно, что и до сих пор говорит, что я не могу использовать общественный член получить на не-объект. – Sturm

+0

Я не помню, что моя проблема была именно в этот момент, но ваш метод, безусловно, правильный. – Sturm

0

Похоже, у меня есть. Похоже, что предыдущий ответ и мои попытки были очень близки. Самая большая проблема с их использованием заключается в том, что метод вызывает объект возврата. Если это не лучший способ сделать это, я надеюсь, что кто-то меня исправит.

$other_object = Mockery::mock('OtherObject'); 
$other_object->shouldReceive('get')->once()->andReturn(new OtherObject); 

$this->mock->shouldReceive('with') 
      ->once() 
      ->with('OtherObject') 
      ->andReturn($other_object); 

$this->app->instance('CustomObject', $this->mock); 

и удаление `OtherObject 'из метода конструктора.

1

Вы можете использовать Mockery::self(), чтобы определить цепные ожидания с аргументами.

$this->mock->shouldReceive('with') 
    ->once()->with('OtherObject') 
    ->andReturn(m::self())->getMock() 
    ->shouldReceive('get')->once() 
    ->andReturn($arrayOfMocks); 

В некоторых случаях вам может понадобиться, чтобы разделить его на две издевается:

$mockQuery = m::mock(); 
$this->mock->shouldReceive('with') 
    ->once()->with('OtherObject') 
    ->andReturn($mockQuery); 
$mockQuery->shouldReceive('get')->once() 
    ->andReturn($arrayOfMocks); 
Смежные вопросы