Php Laravel-单元测试模型保存

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

我正在模拟Laravel中的save函数进行测试。我正在尝试测试一个
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();
}