我正在研究在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));
}
我想写的是在测试中自我解释。我正在尝试处理模型中的验证,并保护一些属性在保存后不被包含。
如果我错了,请告诉我。
答案 0 :(得分:5)
我做了搜索,并在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并进行单元测试的人。