php 如何在测试中获取422响应的内容?

oalqel3c  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(121)

我想测试422响应体,因为在我的情况下,它应该包含验证错误,所以基本上我的测试看起来像这样

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',])
            ]
        );
        self::assertResponseStatusCodeSame(422);

        /** @var array{data: array<string, mixed>} $product */
        $errors = json_decode($response->getContent(), true);
        self::assertArrayHasKey('errors', $errors);
  }

字符串
一切正常,直到我尝试获取内容的时候,当我调用$response->getContent()时,我的测试失败并出错
Symfony\Component\HttpClient\Exception\ClientException:为“http://localhost/api/v1/products/id”返回HTTP 422。
我怎样才能得到响应体而不是抛出的异常?

nkcskrwz

nkcskrwz1#

您必须:

  • 调用$respone->getContent(false),这样它就不会对不成功的响应抛出异常
  • 在调用$response->getContent()之前添加对$this->expectException(ClientException::class)的调用:
$this->expectException(ClientException::class);
$errors = json_decode($response->getContent(), true);

字符串

相关问题