Symfony WebTestCase只是内部的吗?

时间:2017-05-25 01:14:13

标签: symfony testing integration-testing web-testing

Symfony WebTestCase是一个只引导内核并测试Response对象的工具,还是它生成一个PHP Web服务器并对服务器进行测试?

这是为了知道我是否可以测试一个生活在Symfony Framework之外的遗留应用程序

1 个答案:

答案 0 :(得分:2)

如您所见,从源代码中,发出请求的客户端被定义为名为“test.client”的服务。

namespace Symfony\Bundle\FrameworkBundle\Test;
use Symfony\Bundle\FrameworkBundle\Client;
abstract class WebTestCase extends KernelTestCase
{
    protected static function createClient(array $options = array(), array $server = array())
    {
        static::bootKernel($options);
        $client = static::$kernel->getContainer()->get('test.client');
        $client->setServerParameters($server);
        return $client;
    }
}

服务定义为

<service id="test.client" class="Symfony\Bundle\FrameworkBundle\Client" shared="false">
    <argument type="service" id="kernel" />
    <argument>%test.client.parameters%</argument>
    <argument type="service" id="test.client.history" />
    <argument type="service" id="test.client.cookiejar" />     
</service>

Symfony\Component\BrowserKit\Client::doRquest()是提出请求的人。是Symfony\Component\HttpKernel\Client::doRequest()中实现的抽象方法:

protected function doRequest($request)
{
    $response = $this->kernel->handle($request);
    if ($this->kernel instanceof TerminableInterface) {
        $this->kernel->terminate($request, $response);
    }
    return $response;
} 

这意味着必须由内核处理请求。 ...深入了解代码您可以看到请求必须与匹配服务匹配。这意味着您无法在symfony之外请求资源。

如果您不知道如何测试遗留代码,...您可以使用Guzzle客户端。

public function test200()
{
    $client = new GuzzleHttp\Client();

    $res = $client->request('GET', 'https://www.example.com');

    $this->assertEquals(
        200,
       $res->getStatusCode()
    );
}