模拟IOC容器进行Laravel软件包测试

时间:2018-10-20 18:57:00

标签: laravel testing binding request inversion-of-control

我正在研究一个与当前请求进行交互以检索信息的程序包。要检索该信息,我使用$request = Container::getInstance()->make('request');

当我在Laravel应用程序中使用它时,它可以完美工作。但是,我正在尝试在测试中获得完整的代码覆盖率。我相信我需要创建一个新的Container对象,并将其传递给我进行测试的请求,但是效果不是很好。这就是我在做什么...

/**
 * Create a mock request
 *
 * @return Illuminate\Http\Request
 */
public function createDummyRequest($headers = [], $payload = null): Request
{
    return new Request([], [], [], [], [], $headers, $payload);
}

/**
 * Create a dummy IOC container
 *
 * @return Illuminate\Container\Container
 */
public function createDummyContainer(): Container
{
    return new Container;
}

/** @test */
public function response_preferred_format_returns_xml()
{
    $container = $this->createDummyContainer();

    $request = $this->createDummyRequest(['Accept' => 'application/json'], json_encode($this->testArray));

    $container->instance('request', $request);

    $response = $this->createDummyResponse()->preferredFormat($this->testArray, 200, ['Accept' => 'application/xml']);

    $this->assertEquals($this->testXml, $response->getContent());
}

我得到的错误是:

ReflectionException: Class request does not exist

我是在正确的轨道上吗,还是我缺少明显的东西?为什么我不能实例化Container类并绑定Request的实例,以便我的代码可以利用它?

0 个答案:

没有答案