Laravel - 单元测试模型保存

时间:2013-09-19 19:04:42

标签: php unit-testing laravel

我正在研究在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));
}

我想写的是在测试中自我解释。我正在尝试处理模型中的验证,并保护一些属性在保存后不被包含。

如果我错了,请告诉我。

1 个答案:

答案 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并进行单元测试的人。