我正在尝试使用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();
但如果我必须在任何地方这样做,这不是最佳解决方案。