Я пытаюсь проверить эту функцию в контроллере Laravel:Как проверить, с помощью Mockery, контроллера, который использует Ardent Model?
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
$project = $this->project->create(Input::all());
if ($errors = $project->errors()->all()) {
return Redirect::route('projects.create')
->withInput()
->withErrors($errors);
}
return Redirect::route('projects.index')
->with('flash', Lang::get('projects.project_created'));
}
My (неправильно) тест выглядит следующим образом:
public function testStoreFails()
{
$this->mock->shouldReceive('create')
->once()
->andReturn(Mockery::mock(array(
false,
'errors' => array()
)));
$this->call('POST', 'projects');
$this->assertRedirectedToRoute('projects.create');
$this->assertSessionHasErrors();
}
Проблема заключается, в основном, что Пламенная устанавливает $ проект ложным когда проверка не выполняется, но также устанавливает ошибки на том же самом объекте, который может быть удален с помощью -> errors() -> all().
Я совсем потерялся, пытаясь выяснить, что вернуть в макете.
Примечание: Конструктор впрыскивает модель:
public function __construct(Project $project)
{
$this->project = $project;
$this->beforeFilter('auth');
}
PHP Фатальная ошибка: Вызов функции-члена ошибки() на не-объект в/dumminvoicing/приложение/контроллеры/ProjectsController. php on line 43 – Cmorales
Я предполагаю, что метод create не может вернуть только false, потому что в этом случае метод ошибок не может быть вызван. – Cmorales
Хорошо, это имеет смысл. Я прочитал в вашем вопросе, что он был возвращен ложным, и я запутался. Попробуйте отредактировать ответ, я переместил 'create()' mock в начало функции и изменил возвращаемое значение. Я также удалил 'once()' при издевательском 'errors()', так как я думаю, что метод 'withErrors()' может снова называть это ... на всякий случай. –