没有 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 包的用途。

来自documentation

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');