Php Laravel-单元测试模型保存
我正在模拟Laravel中的save函数进行测试。我正在尝试测试一个Php Laravel-单元测试模型保存,php,unit-testing,laravel,Php,Unit Testing,Laravel,我正在模拟Laravel中的save函数进行测试。我正在尝试测试一个saving()事件。我尝试过使用Eloquent::shouldReceive('save'),但它给出了一个致命错误:致命错误:无法实例化抽象类light\Database\Eloquent\Model 这是我目前的测试: public function testRemoveAttributesOnSave(){ Eloquent::shouldReceive('save')->once()->andRe
saving()
事件。我尝试过使用Eloquent::shouldReceive('save')
,但它给出了一个致命错误:致命错误:无法实例化抽象类light\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));
}
我想写的内容在测试中是不言自明的。我试图在模型中处理验证,并在保存后保护某些属性不被包括在内
如果我说的不对,请告诉我。我做了一次搜索,在这里的评论中找到了答案 当您使用模型事件(
公共静态函数boot()
)时,PHPUnit不会注册事件,它们会被忽略。现在,这究竟是PHPUnit的错还是Laravel的错还有待回答,但希望在未来的版本中能够解决这个问题
要解决此问题,您需要在单元测试中手动调用boot()
方法,您可以在setUp()
中执行此操作:
希望这能帮助任何使用Laravel和从事单元测试的人。我做了一次搜索,在这里的评论中找到了答案 当您使用模型事件(
公共静态函数boot()
)时,PHPUnit不会注册事件,它们会被忽略。现在,这究竟是PHPUnit的错还是Laravel的错还有待回答,但希望在未来的版本中能够解决这个问题
要解决此问题,您需要在单元测试中手动调用boot()
方法,您可以在setUp()
中执行此操作:
希望这能帮助任何使用Laravel和从事单元测试的人
public function setUp(){
parent::setUp();
Artisan::call('migrate');
$this->seed();
$this->model=new User;
User::boot();
}