使用Laravel中的配置应用程序文件进行单元测试

mik*_*yuk 6 php unit-testing laravel-5

我的模型方法依赖于config()全局,这里;

public function getGroup()
{
    if(config('app.pages.'.$this->group.'.0')) {
        return $this->group;
    }
    return "city";
}
Run Code Online (Sandbox Code Playgroud)

我试图在我的单元测试类中测试这个方法,

public function testGetGroupReturnsCityAsDefault()
{
    $response = new Response();
    $response->group = "town";
    $test = $response->getGroup();
    dd($test);
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是;

Error: Call to a member function make() on null
/home/vagrant/sites/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:62
/home/vagrant/sites/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:163
Run Code Online (Sandbox Code Playgroud)

我知道这与config()全局有关.但不确定如何在我的测试中设置它.我试过了

public function setUp()
{
config(['app.pages' => [
    'city' => [........
Run Code Online (Sandbox Code Playgroud)

但得到了同样的错误.我怎么设置它?

tam*_*am5 8

我不确定你是否已经解决了这个问题,但我遇到了类似的问题.

为了让它发挥作用,我必须做两件事:

1)确保您正在调用setUp父方法,如下所示:

public function setUp()
{
    parent::setUp();

    // other stuff
}
Run Code Online (Sandbox Code Playgroud)

2)确保你的测试类正在扩展Laravel TestCase而不是PHPUnit_Framework_TestCase

简要说明:基本上你得到的错误是因为ContainerInstanceLaravel是空的,因为你正在浏览PHPUnit,因此它从未创建过.如果执行上述步骤,您将确保Laravel首先实例化容器实例.

PS如果您最终要最终引用env变量,那么您应该查看phpunit.xml环境变量部分.

  • 谢谢你的解决,忘了使用parent :: setUp()方法. (2认同)
  • 对我来说,它是#2!非常感谢! (2认同)