【问题标题】:Laravel - Unit Testing Model SaveLaravel - 单元测试模型保存
【发布时间】:2013-09-24 15:25:44
【问题描述】:

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

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

如果我做错了,请告诉我。

【问题讨论】:

    标签: php unit-testing laravel


    【解决方案1】:

    我进行了搜索,并在 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 和从事单元测试的人。

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 2018-08-05
      • 2017-05-23
      • 2014-07-27
      • 2019-12-11
      • 2014-09-19
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多