У меня есть тип формы Symfony 2.7, который вызывает некоторые ошибки уровня E_USER_DEPRECATED
. Эти ошибки исходят не из моего собственного кода, а из vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php
.
В режиме dev
с помощью веб-браузера я могу получить доступ к странице, используя указанную форму. WDT показывает мне некоторые DEPRECATED сообщения, но форма работает, страница возвращается со статусом 200.
Используя Behat 3 (с Behat\Symfony2Extension\Driver\KernelDriver
и Behat\Mink\Driver\BrowserKitDriver
), запрос на тот же URL-адрес возвращает ошибку сервера 500 состояния. Трассировка стека в ответе показывает, что ошибки DEPRECATED вызывают исключение.
Моя конфигурация Behat такая же простая, как описано в http://docs.behat.org/en/v3.0/cookbooks/1.symfony2_integration.html
Когда я define('BEHAT_ERROR_REPORTING', 0);
поверх моего файла FeatureContext.php
как указано в https://stackoverflow.com/a/9217606/2342504, изменений в поведении нет.
После некоторого сканирования кода я предполагаю, что константа BEHAT_ERROR_REPORTING
удаляется в Behat 3, а вместо этого используется RuntimeCallHandler::errorReportingLevel
.
Однако я не знаю, как настроить или установить RuntimeCallHandler::errorReportingLevel
.
Так что я понял. Этот файл дал мне необходимый совет: 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
После этого Беат, наконец, не сломался, но это показало уродливые исключения-следы. Поэтому я вернул вызов error_reporting
в FeatureContext.php
, прямо перед определением класса:
error_reporting(error_reporting() & ~E_USER_DEPRECATED);
Теперь Behat игнорирует все ошибки уровня E_USER_DEPRECATED
и я предполагаю, что я сохраню это до тех пор, пока не начну использовать Symfony 3.