2017-02-13 36 views
0

我正在研究一个依赖于Config外观的包。代码本身工作正常,但在测试时遇到问题。模拟照明配置外观没有Laravel

起初,我使用此代码:

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

正如许多others,我碰到了一些问题。

我后来看到那个嘲笑Config门面isn't encouraged

要解决它,大多数人往往建议改用以下内容:

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

其中我认为正常工作,如果你从Laravel /流明测试。

但我的问题是,我不是。我只是靠几个Illuminate包,这样以来我得到这是行不通的: RuntimeException: A facade root has not been set.

在这一点上,有些人可能会认为,我应该只是注入Config库的依赖,但我使用的Config门面在由Eloquent模型使用的特征中,因此DI不起作用。

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

谢谢!

PS:这个问题也被张贴在Laracasts

回答

0

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

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

documentation

要使用的测试平台组件,所有你需要做的是延长Orchestra\Testbench\TestCase而不是PHPUnit\Framework\TestCase

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

-1

我面临同样的问题。流明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'); 
+0

你的问题是不相关的矿山。你正在使用Lumen,它仍然有大部分'Illuminate'软件包,因此只要在'bootstrap/app.php'中启用Facades,'Config :: set()'就可以工作。我的使用案例是在独立环境中测试Laravel/Lumen包,但您没有完整的框架,因此您必须依赖Testbench。另外,正如文档中所述,嘲笑'Config'并不是最佳实践。因此,downvote。 –