模拟Laravel Eloquent模型 - 在AppServiceProvider中使用的模拟模型

时间:2018-03-26 10:55:42

标签: php laravel unit-testing mockery

我正在尝试使用alias指令模拟一个雄辩的模型,如下所示:

$transporter = \Mockery::mock('alias:' . Transporter::class)

我在课程中添加了以下注释

* @runTestsInSeparateProcesses
* @preserveGlobalState disabled

问题在于,在AppServiceProvider.php我注册了我的观察者:

Transporter::observe(DefaultValuesObserver::class);

所以当我评论这一行时,模拟效果很好。 但是当这一行出现时,我得到一个Mockery\Exception\RuntimeException: Could not load mock App\Models\Laravel\Transporter, class already exists *这是一个phpunit的过滤运行,其中只运行了一个类。

我想在调用observe时,它已经自动加载了传输类。

因此,即使在单独的进程中运行所有内容,该类也已在AppServiceProvider中注册。

我目前的解决方法是不使用别名,但使用passthru来克服Eloquent问题:

$transporter = \Mockery::mock(Transporter::class)
            ->shouldReceive('getAttribute')
            ->passthru()
            ->shouldReceive('setAttribute')
            ->passthru();

但如果我必须在任何地方这样做,这不是最佳解决方案。

0 个答案:

没有答案