gpt4 book ai didi

symfony - Symfony WebTestCase 只是内部的吗?

转载 作者:行者123 更新时间:2023-11-28 19:53:09 25 4
gpt4 key购买 nike

Symfony WebTestCase 是一个只启动内核并测试响应对象的工具,还是生成一个 PHP Web 服务器并针对服务器进行测试的工具?

这是为了了解我是否可以测试 Symfony 框架之外的遗留应用程序

最佳答案

如您所见,从源代码中,发出请求的客户端被定义为一个名为“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()
);
}

关于symfony - Symfony WebTestCase 只是内部的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44170798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com