【问题标题】:How to run Behat tests when there are errors of level E_USER_DEPRECATED出现 E_USER_DEPRECATED 级别错误时如何运行 Behat 测试
【发布时间】:2015-06-26 03:58:11
【问题描述】:

我有一个 Symfony 2.7 表单类型,它导致了E_USER_DEPRECATED 级别的一些错误。这个错误不是来自我自己的代码,而是来自vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php

在使用网络浏览器的dev 模式下,我可以使用上述表单访问该页面。 WDT 确实向我显示了一些已弃用的消息,但表单确实有效,页面返回状态为 200。

使用 Behat 3(使用 Behat\Symfony2Extension\Driver\KernelDriverBehat\Mink\Driver\BrowserKitDriver),对相同 URL 的请求会返回状态 500 服务器错误。响应中的堆栈跟踪显示 DEPRECATED 错误导致异常。

我的 Behat 配置与 http://docs.behat.org/en/v3.0/cookbooks/1.symfony2_integration.html 中描述的一样简单

当我按照https://stackoverflow.com/a/9217606/2342504 的建议在我的FeatureContext.php 文件上执行define('BEHAT_ERROR_REPORTING', 0); 时,行为没有变化。

经过一些代码扫描,我猜想在 Behat 3 中删除了常量 BEHAT_ERROR_REPORTING 并改用了 RuntimeCallHandler::errorReportingLevel

但我目前不知道如何配置或设置RuntimeCallHandler::errorReportingLevel

【问题讨论】:

    标签: php symfony behat


    【解决方案1】:

    所以我明白了。这个文件给了我所需的提示:https://github.com/Behat/Behat/blob/master/features/error_reporting.feature#L100-L101

    为了获得所需的整数,我使用了php -r "echo E_ALL & ~E_USER_DEPRECATED;",它产生了16383。所以我把这个放到我的behat.yml

        calls:
            error_reporting: 16383
    

    在那之后,Behat 终于没有崩溃,但它确实显示了丑陋的异常痕迹。所以我把对error_reporting的调用放回FeatureContext.php,就在类定义之前:

    error_reporting(error_reporting() & ~E_USER_DEPRECATED);
    

    现在 Behat 会忽略所有级别为 E_USER_DEPRECATED 的错误,我想我会一直保持这种状态,直到我开始使用 Symfony 3。

    【讨论】:

    • 谢谢!使用32759 忽略通知。
    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多