1

我正在模拟 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));
}

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

如果我要解决这个问题,请告诉我。

4

1 回答 1

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 并从事单元测试的人。

于 2013-09-24T07:25:44.913 回答