Запрет выводить сообщения error_log() на терминал во время тестов
Как следует из названия, я с нетерпением жду возможности найти способ предотвратить error_log()
сообщение, которое будет напечатано в терминале во время моего PHPUnit
тесты.
В приведенном выше примере тестируемый метод проходит через error_log("Не показывать"), печатая свое сообщение между тестами.
Есть ли способ предотвратить такое поведение, чтобы сохранить мой тестовый журнал? Кроме того, есть ли способ перехватить сообщение и проверить его вывод? (для случаев, когда сообщение не является простой строкой).
2 ответа
Есть ли способ предотвратить такое поведение, чтобы сохранить мой тестовый журнал? Кроме того, есть ли способ перехватить сообщение и проверить его вывод? (для случаев, когда сообщение не является простой строкой).
Прежде всего, то, что вы видите, это не тестовый журнал. Отображаемое сообщение об ошибке фактически находится в стандартном потоке ошибок, а не в стандартном потоке вывода. То, что вы видите, не имеет большого значения, так как терминал показывает, что оба смешаны, запись в файл не будет регистрировать это сообщение об ошибке.
Это б / с error_log()
записывает сообщение об ошибке в настроенный лог-файл (PHP error_log
директива INI). Поскольку Phpunit работает с CLI-версией PHP (в командной строке), это по умолчанию является указанным стандартным потоком ошибок.
Он также содержит всю необходимую информацию, чтобы не выводить ее в стандартный поток ошибок, а захватить ее, например, временно для теста:
$capture = tmpfile();
$saved = ini_set('error_log', stream_get_meta_data($capture)['uri']);
error_log("Test for this message");
ini_set('error_log', $saved);
var_dump(stream_get_contents($capture));
Это обеспечит вывод содержимого через error_log()
и через временный файл:
string(59) "[06-Jul-2017 12:14:45 Europe/Amsterdam] Test for this message
"
Временный файл удаляется автоматически, когда заканчивается тест-кейс.
Вы можете определить свой собственный обработчик ошибок, используя set_error_handler()
, В комментарии #112881 вы можете увидеть пример использования обратного вызова, который вы можете адаптировать к вашим потребностям, например, протоколировать в файл, просто игнорировать или что-то еще.
Вы можете поместить это в свой загрузочный файл phpunit, и это должно сработать.
Вы должны установить правильный путь к вашему файлу журнала, у которого достаточно прав на запись для вашего скрипта.
вы можете установить путь к файлу журнала ошибок, как показано ниже:
ini_set("error_log", "log_file_name.log");
Вы можете указать абсолютный путь, например
/tmp/logs/script_output.log
или относительный путь.