В настоящее время PhpUnit не показывает трассировку стека для ошибок PHP, возникающих в коде.
Как мне настроить это?
В настоящее время PhpUnit не показывает трассировку стека для ошибок PHP, возникающих в коде.
Как мне настроить это?
PHPUnit использует функцию обработчика ошибок для ловушки и отображения ошибок, но из руководства по PHP в обработчики ошибок,
Следующие типы ошибок не могут быть обрабатывается с помощью определенной пользователем функции: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING и большинство E_STRICT поднят в файле, где Вызывается set_error_handler().
Если вы выполняете тесты в отдельном процессе, PHPUnit получит сообщение об ошибке и сообщение от интерпретатора, но не будет доступной трассировки стека. Это просто ограничение интерпретатора PHP. Fatal означает смертельный.
Это хромающий, но эффективный способ, который я нашел, чтобы получить дамп стека, когда php его не дает. У меня это в классе DebugUtil.
/**
* This is for use when you have the UBER-LAME...
* "PHP Fatal error: Maximum function nesting level of '100' reached,
* aborting! in Lame.php(1273)
* ...which just craps out leaving you without a stack trace.
* At the line in the file where it finally spazzes out add
* something like...
* DebugUtil::dumpStack('/tmp/lame');
* It will write the stack into that file every time it passes that
* point and when it eventually blows up (and probably long before) you
* will be able to see where the problem really is.
*/
public static function dumpStack($fileName)
{
$stack = "";
foreach (debug_backtrace() as $trace)
{
if (isset($trace['file']) &&
isset($trace['line']) &&
isset($trace['class']) &&
isset($trace['function']))
{
$stack .= $trace['file'] . '#' .
$trace['line'] . ':' .
$trace['class'] . '.' .
$trace['function'] . "\n";
}
}
file_put_contents($fileName, $stack);
}