testing - 没有 Laravel 的模拟 Illuminate Config facade

标签 testing laravel-5 phpunit mockery laravel-facade

我正在开发一个依赖于 Config facade 的包。 代码本身工作正常,但我在测试时遇到了问题。

最初,我使用的是这段代码:

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

尽可能多others ,我遇到了一些问题。

我后来读到模拟 Config 门面 isn't encouraged .

为了解决这个问题,大多数人倾向于建议改用以下内容:

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

如果您从 Laravel/Lumen 进行测试,我认为它工作正常。

但我的问题是,我不是。我只依赖于一些 Illuminate 包,所以这不会起作用,因为我得到: RuntimeException:尚未设置外观根。

在这一点上,有些人可能会建议我应该只注入(inject) Config 存储库依赖项,但我在一个特征中使用了 Config facade Eloquent 模型,因此 DI 将不起作用。

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

谢谢!

PS:这个问题也发布在Laracasts

最佳答案

我遇到了同样的问题。流明 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');

关于testing - 没有 Laravel 的模拟 Illuminate Config facade,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42207563/

相关文章:

firebase - 使用 firebase 访问谷歌云数据存储数据

php - 如何使用 laravel 5.1 从数据库中只选择 2 列?

PHPUnit 没有提供足够的关于跳过和不完整测试的信息

testing - 无法从 proxyquire 返回新对象

iOS - 发布前测试应用程序商店二进制文件?

php - Sublimetext php-cs-fixer 将命名空间更改为小写

PHPUnit 没有捕捉到预期的异常

testing - 在不同浏览器中并行运行 cucumber 测试脚本

javascript - 如何测试嵌套 promise 的 Angular 服务功能?

mocking - 在 phpunit 中创建模拟而不模拟任何方法?