2016-03-22 31 views
2

当我运行的浏览器,它的工作原理的服务,但如果我执行的测试文件我得到这个错误:错误执行单元测试与laravel加载自定义设置文件

1) Api\Domain\Tests\ServiceTest::testSetUp 
RuntimeException: A facade root has not been set. 

/WWW/api/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:210 
/WWW/api/src/Api/Infrastructure/Domain/Model/SolrBaseRepository.php:30 
/WWW/api/src/Api/Infrastructure/Domain/Model/SolrBaseRepository.php:30 
/WWW/api/src/Api/Domain/Tests/ServiceTest.php:80 

文件confguration:配置/ Solr的。 PHP

return array(
    'endpoint' => array(
     'localhost' => array(
      'host' => '192.168.1.100', 
      'port' => 8080, 
      'path' => '/solr/clients/', 
     ) 
    ) 
); 

Solr的基础库:

use Illuminate\Support\Facades\Config; 

abstract class SolrBaseRepository 
protected $client; 


    /** 
    * SolrBaseRepository constructor. 
    */ 
    public function __construct(){ 
     $this->client = new \Solarium\Client(Config::get('solr')); 
    } 
} 

如果我改变

$this->client = new \Solarium\Client(Config::get('solr')); 

通过

$this->client = new \Solarium\Client(array(
      'endpoint' => array(
       'localhost' => array(
        'host' => '192.168.1.100', 
        'port' => 8080, 
        'path' => '/solr/clients/', 
       ) 
      ) 
     )); 

测试工作。 ServiceTest:原料药/域/测试/ ServiceTest.php

class ServiceTest extends \PHPUnit_Framework_TestCase{ 
public function testSetUp() 
    { 
     $this->setUp(); 
     $this->solrServicesRepository = New SolrServicesRepository(); 
    } 
} 

我试图解决它this page添加到我的ServiceTest.php:

use \Illuminate\Container\Container as Container; 
use \Illuminate\Support\Facades\Facade as Facade; 

/** 
* Setup a new app instance container 
* 
* @var Illuminate\Container\Container 
*/ 
$app = new Container(); 
$app->singleton('app', 'Illuminate\Container\Container'); 

/** 
* Set $app as FacadeApplication handler 
*/ 
Facade::setFacadeApplication($app); 

但是,这并不对MI工作。

回答

1

已经有一段时间了,但是我发现了答案,因为我陷入了同样的问题。

在您的测试,你需要调用父类的设置功能,因为它初始化:

class ExampleTest extends TestCase 
{ 

    public function setUp() 
    { 
     parent::setUp(); 
     $this->faker = Faker\Factory::create(); 
     // other lines of code that you need 
    } 

    public function testWithFacades() 
    { 
     //now it works 
    } 
}