我正在努力模拟Laravel中的保存函数进行测试。 我有一个saving()
事件,我正在尝试测试。 我尝试使用Eloquent::shouldReceive('save')
但它给出了一个致命错误:Fatal error: Cannot instantiate abstract class Illuminate'Database'Eloquent'Model
.
这是我到目前为止的测试:
public function testRemoveAttributesOnSave(){
Eloquent::shouldReceive('save')->once()->andReturn(true);
$this->model->attributeA=1;
$this->model->attributeB=2;
$this->model->save();
$this->assertTrue(!isset($this->model->attributeB));
}
我想写的是对测试的不言自明。 我正在尝试处理模型中的验证,并保护某些属性在保存后不被包含。
如果我做错了,请告诉我。
我进行了搜索,并在SO的评论中找到了答案
当您使用模型事件 ( public static function boot()
) 时,PHPUnit 不会注册这些事件,并且它们将被忽略。 现在还有待回答,这是PHPUnit的错还是Laravel的错,但希望这是在未来版本中解决的问题。
要解决此问题,您需要在单元测试中手动调用 boot()
方法,并且可以在 setUp()
中执行此操作:
public function setUp(){
parent::setUp();
Artisan::call('migrate');
$this->seed();
$this->model=new User;
User::boot();
}
希望这可以帮助任何使用 Laravel 并进行单元测试的人。