Symfony Web测试用例JSON

时间:2015-11-30 22:15:35

标签: json symfony functional-testing

如何在API中再次运行webtestcase?有关功能测试的默认指南仅提供以下命令:

$client = static::createClient();
$crawler = $client->request('GET', '/some-url');

Crawler类是一个DOM爬虫。我检查了FrameworkBundle \ Client类的引用,但我找不到一个允许我发出返回原始Response的请求的方法。至少这样,我将能够对输出进行json_decode并进行测试。

我可以用什么来实现这个目标?

3 个答案:

答案 0 :(得分:18)

进行$client->request(...)通话后,您可以执行$client->getResponse()以获得服务器响应。

然后您可以断言状态代码并检查其内容,例如:

$client->request('GET', '/my-url');
$response = $client->getResponse();
$this->assertSame(200, $response->getStatusCode());
$responseData = json_decode($response->getContent(), true);
// etc...

答案 1 :(得分:2)

willdurand/rest-extra-bundle捆绑包提供additional helpers to test JSON。为了测试相等性,已经有一个内置的断言用于此目的:

use Bazinga\Bundle\RestExtraBundle\Test\WebTestCase as BazingaWebTestCase;

// ...

$client->request('GET', '/my-url');
$response = $client->getResponse();
$this->assertJsonResponse($response, Response::HTTP_OK);
$this->assertJsonStringEqualsJsonString($expectedJson, $response);

请注意,assertJsonStringEqualsJsonString声明会对$expectedJson$response字符串的规范化负责。

答案 2 :(得分:0)

this commit以来有一个PHPUnit \ Framework \ Assert :: assertJson()方法 您还可以测试响应的“内容类型”。

$response = $client->getResponse();
$this->assertTrue($response->headers->contains('Content-Type', 'application/json'));
$this->assertJson($response->getContent());
$responseData = json_decode($response->getContent(), true);
相关问题