我正在测试一个Laravel api。当我尝试使用雄辩的模型填充方法创建部分模拟时,phpunit抛出了一个错误。
密码
$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.
我真的不知道这是一个雄辩的错误,还是一个可笑的错误。
笔记:
我暂时用Model::更新方法解决了这个问题,而不是Model::fill,然后Model::保存,但是我仍然想知道如何模拟填充方法。
链接
http://laravel.com/api/5.0/Illuminate/Database/Eloquent/Model.html#method_fill
我认为mock对象是创建的,但是没有这个方法。您需要为fill()
方法定义一个期望值,以指示她的模拟行为。比如:
$mock->shouldReceive('fill')->once()->andReturn('ok');
希望能有帮助。
您也可以使用被动部分模拟:
$mock = m::mock('Model')->makePartial();
$mock->shouldReceive("fill")->once()->andReturn("ok");
在被动部分中,除非方法调用与已知期望匹配,否则所有方法都将简单地遵从父类原始方法。它将跳过模型构造函数中意外的fill
方法的调用。