正如标题所述,我期待找到一种方法来防止在error_log()
测试期间在终端上打印PHPUnit
消息。
在上面的示例中,测试中的方法通过error_log(不要显示')显示测试之间的消息。
有没有办法阻止这种行为,保持我的测试日志花哨?另外,有没有办法捕获消息并测试其输出? (对于消息不是简单字符串的情况)。
答案 0 :(得分:2)
有没有办法阻止这种行为,保持我的测试日志花哨?另外,有没有办法捕获消息并测试其输出? (对于消息不是简单字符串的情况)。
首先,您看到的不是测试日志。 显示的错误消息实际上是标准错误流而不是标准输出流。对于你所看到的,这并没有什么区别,因为终端显示两者混合,记录到文件不会记录该错误消息。
这是b / c error_log()
将错误消息写入配置的日志文件(PHP' s error_log
ini指令)。由于Phpunit使用CLI的CLI版本运行(在命令行上),默认情况下是标准错误流。
这也包含所有需要的信息,不输出到标准错误流,而是捕获它,例如暂时进行测试:
$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
"
当测试用例结束时,临时文件会自动删除。
答案 1 :(得分:0)
您可以使用set_error_handler()
定义自己的错误处理程序。在评论#112881中,您可以看到使用回调的示例,您可以根据自己的需要进行调整,例如记录到文件,只需忽略或其他。
你可以将它放入你的phpunit bootstrap文件中,这应该可以解决问题。
答案 2 :(得分:0)
您应设置具有足够脚本写权限的日志文件的正确路径。
您可以如下设置错误日志文件路径:
ini_set("error_log", "log_file_name.log");
您可以使用
这样的绝对路径/tmp/logs/script_output.log
或相对路径。