我正在开发一个依赖于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
存储库依赖项,但我在Config
模型使用的特征中使用Eloquent
外观因此DI不起作用。
还有其他方法可以解决这个问题吗?
谢谢!
PS:此问题也发布在Laracasts
上答案 0 :(得分:0)
对于那些遇到类似问题的人,我终于找到了解决这个问题的正确方法。
测试Laravel包正是Testbench包的用途。
要使用Testbench Component,您只需要扩展
Orchestra\Testbench\TestCase
而不是PHPUnit\Framework\TestCase
。
这样,设置配置值就像调用Config::set()
一样,就像完整的Laravel安装一样。不再有Mockery
个问题。
答案 1 :(得分:0)
我遇到了同样的问题。流明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');