php - 使用 Laravel 执行单元测试以加载自定义设置文件时出错

标签 php solr laravel-5 solarium

当我从浏览器运行该服务时,它可以工作,但是如果我执行测试文件,我会收到此错误:

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

文件配置:config/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/',
                )
            )
        ));

测试有效。 服务测试:Api/Domain/Tests/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 不起作用。

最佳答案

已经有一段时间了,但我找到了答案,因为我遇到了同样的问题。

在您的测试中,您需要在初始化时调用父设置函数:

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
    }
}

关于php - 使用 Laravel 执行单元测试以加载自定义设置文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36153465/

相关文章:

php - 比较 Laravel 5 中两个不同表的时间戳

php - 在 PHP 中用空格连接字符串的最佳方法

javascript - 从 AJAX 打印页面

php - 最后一个值没有出现在动态 php 数组中

Solr DataImportHandler delta 导入查询

mysql - 在 MySql 中存储可搜索的 JSon

Solr 搜索器变暖

javascript - 动态创建 ui DateTimePicker 时未捕获的类型错误

php - 向未支付订单的用户发送邮件 php

mysql - 私有(private),群组和公共(public)聊天需要数据库结构 - MySQL