Laravel雄辩模型在单元测试期间重置启动属性

时间:2014-01-27 00:21:07

标签: unit-testing testing laravel laravel-4 phpunit

我在一个从Eloquent的基础模型类扩展的类上有一个boot方法。我想运行一些单元测试,我需要在每次测试时触发它。不幸的是,类ID索引持久存在于我扩展的构造函数中设置的Illuminate\Database\Eloquent\Model::$booted属性 - 因此它仅适用于第一个测试。我已经尝试调整一些phpunit的标志 - 我尝试过程隔离 - 似乎没什么用。

有没有办法可以重置此属性,以便每个测试都能触发我的启动方法?

Illuminate\Database\Eloquent\Model.php
public function __construct(array $attributes = array())
{
    if ( ! isset(static::$booted[get_class($this)])) <-- Keeps persisting
    {
        static::$booted[get_class($this)] = true;

        static::boot();
    }

    ...
}


app\models\Foo.php
class Foo extends Model {
    ...

    protected static function boot() { <-- first test to execute wins, all other calls get skipped
        ...
    }

    ...
}

1 个答案:

答案 0 :(得分:2)

啊... - 只是一点点研究,答案就揭晓了!

我的问题基本上是这个问题的重复Laravel 4 Model Events don't work with PHPUnit,它在github上引用了这个thread的解决方案