You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试中获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:07:11