1

我正在开发一个依赖于Config外观的包。代码本身运行良好,但我在测试时遇到问题。

最初,我使用的是以下代码:

Config::shouldReceive('foo.bar')
    ->andReturn(true);

和其他许多一样,我遇到了一些问题。

后来我读到不鼓励Config嘲笑外观。

为了解决这个问题,大多数人倾向于建议使用以下方法:

Config::set('foo.bar', true);

如果您从 Laravel/Lumen 进行测试,我认为效果很好。

但我的问题是,我不是。我只依赖几个Illuminate包,所以这不起作用,因为我得到: RuntimeException: A facade root has not been set.

在这一点上,有些人可能会建议我应该只注入Config存储库依赖项,但我在模型使用Config的特征中使用外观Eloquent,所以 DI 不起作用。

有没有其他方法可以解决这个问题?

谢谢!

PS:这个问题也已经发布在Laracasts上

4

2 回答 2

1

我面临同样的问题。Lumen 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');
于 2017-07-19T09:14:23.537 回答
0

对于那些遇到类似问题的人,我终于找到了解决这个问题的正确方法。

测试 Laravel 包正是Testbench包的用途。

文档中:

要使用 Testbench 组件,您需要做的就是扩展Orchestra\Testbench\TestCase而不是PHPUnit\Framework\TestCase.

这样,设置配置值就像Config::set()在完整的 Laravel 安装中一样调用。没有更多的Mockery问题。

于 2017-03-05T12:57:09.727 回答