gpt4 book ai didi

symfony - PHPUnit:不要报告呈现为 HTTP 错误的 Symfony 异常

转载 作者:行者123 更新时间:2023-12-04 11:56:10 28 4
gpt4 key购买 nike

我正在使用 PHPUnit(6.5.8,升级到 7.1.5,没有区别)在使用 Symfony(Flex 1.0)构建的 API 上运行集成测试。

我有几个 Controller 以一种或另一种方式抛出异常,例如出于安全原因(例如使用 @IsGranted 注释)。

这些异常通过 ExceptionController of the FOSRestBundle 转换为 JSON .这工作正常,也在测试中 .

我正在通过查看状态代码等来测试正在转换的异常,例如:

public function testSecurity() {
$this->request('GET', '/foo');
$this->assertStatusCode(403);
}

现在,这个测试 不会失败 一切正常,但 PHPUnit 仍然显示以下类型的错误:
[error] Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: "Access Denied by controller annotation @IsGranted("ROLE_ADMIN")" at /var/www/symfony/vendor/symfony/security/Http/Firewall/ExceptionListener.php line 117

虽然这不会影响测试本身,因为它们仍然成功,但仍然相当麻烦,因为这些消息会干扰测试运行的输出,从而更难发现实际错误发生的位置。因此,我想关闭这些错误消息。 IMO,这些异常不应该“未被捕获”,因为它们显然是由某种处理程序处理的,因为它们被转换为 JSON 响应。

我试过的:
  • 关闭 this issue 中提到的错误日志记录准确描述我看到的行为
  • 在 PHPUnit 中断言抛出的异常,但这失败了,因为在测试中实际上并未抛出异常
  • 各种 PHPUnit 设置( error_reportingSHELL_VERBOSITYAPP_DEBUG 等)

  • 我注意到的:

    这仅在抛出异常时发生(例如,由于使用 @IsGranted )。如果我改为返回异常,PHPUnit 不会显示错误。

    最佳答案

    我有同样的问题。我假设您正在使用 BrowserKit 进行功能测试。

    我的解决方法是检查 AccessDeniedException被抛出而不是检查状态代码是否为 403。

    为了获得异常,我禁用了 BrowserKit 异常捕获器:

    public function testSecurity()
    {
    $this->expectException(AccessDeniedException::class);

    $client = static::createClient();
    $client->client->catchExceptions(false);

    $client->request('GET', '/foo');
    }

    关于symfony - PHPUnit:不要报告呈现为 HTTP 错误的 Symfony 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50456114/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com