我正在尝试编写一个Symfony 2命令,该命令基本上可以在多个路由(通过YML文件或通过参数)中读取,并且可以进行并获取每个路线的响应这些页面,所以我可以报告它们是否回到200/404/502等。路线是相对的,因此诸如'/'and'/news'之类的路线。
似乎无法确定如何通过这些请求发送这些请求以获得真实的响应,我可以使用request :: create()创建请求,但这似乎不起作用。
即使它的命令,我也必须通过内核?任何帮助将不胜感激。
到目前为止我拥有的东西:
$request = Request::create('/news', 'GET');
$response = new Response();
$response->prepare($request);
$res = $response->send();
var_dump($res->getContent());
这一直都带有一个空字符串。
还尝试了以下内容:
$client = new Client(
new HttpKernel(new EventDispatcher(), new ControllerResolver())
);
$client->request('GET', '/news');
var_dump($client->getResponse());
带有路由的返回的是错误配置的错误
谢谢凯文
根据您的评论:
基本上是IM测试代码库,以确保其全部设置在我向公众发布之前,因此我想模拟客户端请求到代码,并确保我得到200个响应,如果404又回来了我知道有一个问题,所以要暂停发布。
这很容易通过测试:
<?php
// tests/AppBundle/Controller/PostControllerTest.php
namespace TestsAppBundleController;
use SymfonyBundleFrameworkBundleTestWebTestCase;
class PostControllerTest extends WebTestCase
{
public function testNews()
{
$client = static::createClient();
$crawler = $client->request('GET', '/news');
// Assert a specific 200 status code
$this->assertEquals(
200, // or SymfonyComponentHttpFoundationResponse::HTTP_OK
$client->getResponse()->getStatusCode()
);
}
}
您还需要安装phpunit:
composer require --dev "phpunit/phpunit=5.4.*"
然后您可以启动测试:
php ./vendor/bin/phpunit -c app/phpunit.xml.dist
您将获得这样的结果:
PHPUnit 5.4.6 by Sebastian Bergmann and contributors.
..................... 21 / 21 (100%)
Time: 5.29 seconds, Memory: 58.00MB
OK (21 tests, 149 assertions)
最好的方法是使用HTTP客户端转移创建请求对象的责任,执行请求并返回响应。
最常用的是Guzlezle http客户端(http://docs.guzzlephp.org/en/latest/)
因此,在您的命令中,您可以从容器中获取路由器,为此生成URL,然后使用Guzzle Client执行请求。
评论后编辑:
要达到该目标以执行请求而不实际运行服务器,您可以使用 Symfony Bundle frameworkbundle client client对象,该 client对象使用内核来执行请求响应(当然,您可以注入您的当前内核命令)。几乎就像WebTestcase类一样。
http://api.symfony.com/2.8/symfony/bundle/frameworkbundle/client.html
希望这会有所帮助!(稍后我将使用一些代码更新)