测试中获取422响应内容时抛出ClientException,如何获取响应体?
解决Symfony测试中422响应体获取时抛出ClientException的问题
Symfony的HttpClient(包括测试环境createClient()返回的客户端)默认会对4xx/5xx状态码的响应抛出异常,这就是你调用$response->getContent()时触发ClientException的原因。要获取这类响应的内容,只需在请求时禁用这个默认行为。
修改后的测试代码
public function testReturnsBadRequest(): void { $response = static::createClient()->request( 'POST', 'api/v1/products/id', [ 'headers' => [ 'accept' => ['application/json'], 'content-type' => ['application/json'], ], 'body' => json_encode(['shopId' => 'invalid']), 'http_errors' => false // 禁用HTTP错误自动抛出异常 ] ); self::assertResponseStatusCodeSame(422); /** @var array{errors: array<string, mixed>} $errors */ $errors = json_decode($response->getContent(), true); self::assertArrayHasKey('errors', $errors); }
关键说明
添加'http_errors' => false选项后,HttpClient不会再对422这类非成功状态码的响应抛出异常,你可以正常调用getContent()解析响应体,完成后续的验证错误断言。
内容的提问来源于stack exchange,提问作者Bogdan Dubyk
相关产品推荐
相关产品推荐

