如何在API上运行webtestcase?关于功能测试的默认指南仅给予以下命令:
$client = static::createClient(); $crawler = $client->request('GET', '/some-url');
Crawler类是一个DOM爬虫。我检查了FrameworkBundle\Client类的引用,但找不到允许我发出返回原始Response的请求的方法。至少这样,我将能够对输出进行json_decode并进行测试。我可以使用什么来实现这一点?
7hiiyaii1#
在执行$client->request(...)调用之后,可以执行$client->getResponse()来获取服务器响应。然后,您可以Assert状态代码并检查其内容,例如:
$client->request(...)
$client->getResponse()
$client->request('GET', '/my-url'); $response = $client->getResponse(); $this->assertSame(200, $response->getStatusCode()); $responseData = json_decode($response->getContent(), true); // etc...
iyfjxgzm2#
有一个PHPUnit\Framework\Assert::assertJson()方法,因为this commit你也可以测试一个Content-Type响应头。
PHPUnit\Framework\Assert::assertJson()
Content-Type
$response = $client->getResponse(); $this->assertTrue($response->headers->contains('Content-Type', 'application/json')); $this->assertJson($response->getContent()); $responseData = json_decode($response->getContent(), true);
ax6ht2ek3#
willdurand/rest-extra-bundle bundle提供了额外的帮助器来测试JSON。为了测试相等性,已经有一个内置的Assert用于此目的:
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);
请注意,assertJsonStringEqualsJsonStringAssert将负责$expectedJson和$response字符串的规范化。
assertJsonStringEqualsJsonString
$expectedJson
$response
3条答案
按热度按时间7hiiyaii1#
在执行
$client->request(...)
调用之后,可以执行$client->getResponse()
来获取服务器响应。然后,您可以Assert状态代码并检查其内容,例如:
iyfjxgzm2#
有一个
PHPUnit\Framework\Assert::assertJson()
方法,因为this commit你也可以测试一个Content-Type
响应头。ax6ht2ek3#
willdurand/rest-extra-bundle bundle提供了额外的帮助器来测试JSON。为了测试相等性,已经有一个内置的Assert用于此目的:
请注意,
assertJsonStringEqualsJsonString
Assert将负责$expectedJson
和$response
字符串的规范化。