没有 Laravel 的模拟 Illuminate Config facade
Mock Illuminate Config facade without Laravel
我正在开发一个依赖于 Config
外观的包。
代码本身运行良好,但我在测试时遇到问题。
最初,我使用的是这段代码:
Config::shouldReceive('foo.bar')
->andReturn(true);
和others一样,我遇到了一些问题。
我后来读到嘲笑 Config
门面 isn't encouraged。
为了解决这个问题,大多数人倾向于建议改用以下内容:
Config::set('foo.bar', true);
如果您从 Laravel/Lumen 进行测试,我认为这很好用。
但我的问题是,我不是。我只依赖于几个 Illuminate
包,所以这行不通,因为我得到:
RuntimeException: A facade root has not been set.
此时,有些人可能会建议我应该只注入 Config
存储库依赖项,但我在 [=19= 使用的特征中使用 Config
外观] 模型,所以 DI 将不起作用。
还有其他方法可以解决这个问题吗?
谢谢!
PS: 这个问题也发表在 Laracasts
对于那些 运行 遇到类似问题的人,我终于找到了解决这个问题的正确方法。
测试 Laravel 包正是 Testbench 包的用途。
To use Testbench Component, all you need to do is extend Orchestra\Testbench\TestCase
instead of PHPUnit\Framework\TestCase
.
这样,设置配置值只是调用 Config::set()
的问题,就像在完整的 Laravel 安装中一样。没有更多 Mockery
个问题。
我遇到了同样的问题。流明 5.4
使用 Config::set('key', 'value')
无效。所以只好用这种方式了
//test
use Illuminate\Support\Facades\Config;
Config::shouldReceive('get')
->once()
->with('key')
->andReturn('value');
,
//code
use Illuminate\Support\Facades\Config;
Config::get('key'); //instead config('key');
我正在开发一个依赖于 Config
外观的包。
代码本身运行良好,但我在测试时遇到问题。
最初,我使用的是这段代码:
Config::shouldReceive('foo.bar')
->andReturn(true);
和others一样,我遇到了一些问题。
我后来读到嘲笑 Config
门面 isn't encouraged。
为了解决这个问题,大多数人倾向于建议改用以下内容:
Config::set('foo.bar', true);
如果您从 Laravel/Lumen 进行测试,我认为这很好用。
但我的问题是,我不是。我只依赖于几个 Illuminate
包,所以这行不通,因为我得到:
RuntimeException: A facade root has not been set.
此时,有些人可能会建议我应该只注入 Config
存储库依赖项,但我在 [=19= 使用的特征中使用 Config
外观] 模型,所以 DI 将不起作用。
还有其他方法可以解决这个问题吗?
谢谢!
PS: 这个问题也发表在 Laracasts
对于那些 运行 遇到类似问题的人,我终于找到了解决这个问题的正确方法。
测试 Laravel 包正是 Testbench 包的用途。
To use Testbench Component, all you need to do is extend
Orchestra\Testbench\TestCase
instead ofPHPUnit\Framework\TestCase
.
这样,设置配置值只是调用 Config::set()
的问题,就像在完整的 Laravel 安装中一样。没有更多 Mockery
个问题。
我遇到了同样的问题。流明 5.4
使用 Config::set('key', 'value')
无效。所以只好用这种方式了
//test
use Illuminate\Support\Facades\Config;
Config::shouldReceive('get')
->once()
->with('key')
->andReturn('value');
,
//code
use Illuminate\Support\Facades\Config;
Config::get('key'); //instead config('key');