2015-09-25 3 views
0

Я пытаюсь проверить apar Laravel. Когда я пытаюсь создать частичный макет с помощью метода заполнения Eloquent Model, phpunit выдает ошибку.Mockery не может создать частичный макет с использованием метода заполнения Eloquent Model

Код

$mock = m::mock('App\User', [])->makePartial(); 
$mock->shouldReceive('fill')->once()->andReturn('ok'); 
$result = $mock->fill([]); 
var_dump($result); 

Ошибка

PHP Fatal error: Call to a member function __call() on a non-object 
PHP Fatal error: Uncaught exception 'Illuminate\Contracts\Container\BindingResolutionException' with message 'Target [Illuminate\Contracts\Debug\ExceptionHandler] is not instantiable. 

Я действительно не знаю, если это либо Eloquent ошибка, или насмешки ошибка.

Примечания:

я временно решить эту проблему с помощью метода Model :: обновления вместо модели :: заполнить и затем Model :: сохранить, но я все еще хочу знать, как издеваться метод заливки.

Ссылки

http://laravel.com/api/5.0/Illuminate/Database/Eloquent/Model.html#method_fill

ответ

1

Я думаю, что фиктивный объект создается, но без этого метода. Вам нужно будет определить математическое ожидание метода fill(), чтобы диктовать свое издеваемое поведение. например:

$mock->shouldReceive('fill')->once()->andReturn('ok'); 

надеюсь, что это поможет.

+0

Точно, использование [methodName] означает, что только этот метод следует издеваться. –

+1

Этот ответ почти полностью прав. Если я добавлю эту строку, она по-прежнему бросает ту же ошибку, но вы помогли найти настоящую проблему. Реальная проблема заключается в следующем: конструктор модели вызывает функцию заполнения, и это происходит до добавления ожидания. Итак, я смотрел, как это решить, и я обнаружил, что мне нужно создать частичный макет, но теперь он вызывает еще одну ошибку. –

0

Вы также можете использовать пассивный частичные издеваться как:

$mock = m::mock('Model')->makePartial(); 
$mock->shouldReceive("fill")->once()->andReturn("ok"); 

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

+0

Спасибо, я сделал это, но теперь это вызывает еще одну ошибку, и я все еще ищу, как издеваться над методом заполнения. –

+0

Можете ли вы дать мне более подробную информацию о новой ошибке. – absolux

+0

Он выдает следующие ошибки: PHP Неустранимая ошибка: вызов функции-члена __call() для не-объекта PHP Неустранимая ошибка: исключить исключение «Illuminate \ Contracts \ Container \ BindingResolutionException» с сообщением «Target [Illuminate \ Contracts \ Debug] \ ExceptionHandler] не является реальным. –

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