Настройка атрибутов на моделях во время тестирования

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

Я пытался установить эти свойства с помощью andSet() на осмеянном объекте, но тогда это дает мне ошибку getAttribute() does not exist on this mocked object.,

Вот мой метод контроллера.

public function __construct(ApplicationRepositoryInterface $application)
{
$this->beforeFilter('consumer_application');

$this->application = $application;
}

public function edit($application_id)
{
$application = $this->application->find($application_id);

$is_consumer = Auth::user()->isAdmin() ? 'false' : 'true';

return View::make('application.edit')
->with('application', $application)
->with('is_consumer', $is_consumer)
->with('consumer', $application->consumer);
}

И мой тест …

public function setUp()
{
parent::setUp();
$this->mock = Mockery::mock($this->app->make('ApplicationRepositoryInterface'));
}

public function testEdit()
{
$this->app->instance('ApplicationRepositoryInterface', $this->mock);

$this->mock
->shouldReceive('find')
->once()
->andReturn(Mockery::mock('Application'))
->andSet('consumer', Mockery::mock('Consumer'));

Auth::shouldReceive('user')
->once()
->andReturn(Mockery::mock(array('isAdmin' => 'true')));

$application_id = Application::first()->id;
$this->call('GET', 'consumer/application/'.$application_id.'/edit');

$this->assertResponseOk();
$this->assertViewHas('application');
$this->assertViewHas('is_consumer');
$this->assertViewHas('consumer');
}

Дальнейшее, что я получил, это удаление andSet() часть, которая заботится о getAttribute() does not exist on this mock object но тогда это говорит мне consumer не определено, когда представление загружено и все еще терпит неудачу.

4

Решение

Вы должны изменить:

 Auth::shouldReceive('user')
->once()
->andReturn(Mockery::mock(array('isAdmin' => 'true')));

К этому:

 Auth::shouldReceive('user->isAdmin')
->once()
->andReturn('true');
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]