gpt4 book ai didi

php - Mocking Laravel Eloquent 模型 - AppServiceProvider 中使用的 Mocking 模型

转载 作者:行者123 更新时间:2023-12-04 14:00:16 30 4
gpt4 key购买 nike

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

$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();

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

最佳答案

尝试使用 $mock = \Mockery::mock('overload:MyClass');供引用http://docs.mockery.io/en/latest/reference/creating_test_doubles.html?highlight=alias%3A#overloading

关于php - Mocking Laravel Eloquent 模型 - AppServiceProvider 中使用的 Mocking 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49489789/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com