2014-01-24 3 views
2

У меня есть проект Symfony2 с некоторыми функциональными тестами.
Когда я запускаю тестовый пакет без включенного покрытия кода, проблем нет. Но когда я пытаюсь создать покрытие кода я получаю фатальную ошибку PHP:Ограничение памяти покрытия кода PHPUnit

Generating code coverage report, this may take a moment. 
PHP Fatal error: Allowed memory size of 209715200 bytes exhausted 
(tried to allocate 79 bytes) in /usr/share/php/PHP/Token/Stream.php on line 205 
PHP Stack trace: 
PHP 1. {main}() /usr/bin/phpunit:0 
PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:46 
PHP 3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:130 
PHP 4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:192 
PHP 5. PHP_CodeCoverage_Report_HTML->process() /usr/share/php/PHPUnit/TextUI/TestRunner.php:373 
PHP 6. PHP_CodeCoverage->getReport() /usr/share/php/PHP/CodeCoverage/Report/HTML.php:133 
PHP 7. PHP_CodeCoverage_Report_Factory->create() /usr/share/php/PHP/CodeCoverage.php:141 
PHP 8. PHP_CodeCoverage_Report_Factory->addItems() /usr/share/php/PHP/CodeCoverage/Report/Factory.php:76 
PHP 9. PHP_CodeCoverage_Report_Factory->addItems() /usr/share/php/PHP/CodeCoverage/Report/Factory.php:98 
PHP 10. PHP_CodeCoverage_Report_Node_Directory->addFile() /usr/share/php/PHP/CodeCoverage/Report/Factory.php:94 
PHP 11. PHP_CodeCoverage_Report_Node_File->__construct() /usr/share/php/PHP /CodeCoverage/Report/Node/Directory.php:211 
PHP 12. PHP_CodeCoverage_Util::getLinesToBeIgnored() /usr/share/php/PHP/CodeCoverage/Report/Node/File.php:166 
PHP 13. PHP_Token_Stream_CachingFactory::get() /usr/share/php/PHP/CodeCoverage/Util.php:254 
PHP 14. PHP_Token_Stream->__construct() /usr/share/php/PHP/Token/Stream/CachingFactory.php:68 
PHP 15. PHP_Token_Stream->scan() /usr/share/php/PHP/Token/Stream.php:147 

Я уже измененную memory_limit как для кли и сервера php.ini.
Я также уже модифицировал memory_limit suhosin.

При печати phpinfo() в кли я получил эти значения:

memory_limit => 2048M => 2048M 
suhosin.memory_limit => 2G => 2G 

ли кто-нибудь имеет представление о том, что может быть причиной этой проблемы? Кто-нибудь сталкивался с такой ситуацией?

+0

Сколько файлов вы включаете в отчет о покрытии? Существует известная проблема с php-токеном-потоком относительно управления памятью, когда включено много файлов: https://github.com/sebastianbergmann/php-token-stream/issues/60 – Motin

ответ

0

Похоже, что он останавливается на 200 мегабайтах, так что вам нужно еще раз просмотреть свой конфиг, чтобы использовать больше памяти или у вас есть цикл включения где-нибудь в коде. Это случилось со мной с веточкой включает пару раз

+0

Вы говорите о замкнутом цикле, но когда я отобразить страницу в моем браузере. У меня нет проблем, так что это не может быть проблемой с бесконечным циклом? – Renrhaf

0

Увеличьте свой лимит памяти PHP (я использовал 1744M, чтобы оставить свободное пространство для PHP). У меня была такая же проблема, прежде чем делать дополнительную память. Следующее, что я изменил, это исключить внешние библиотеки из покрытия кода (они протестированы в своем пакете автором, поэтому мне не нужно знать их покрытие кода в моем проекте). Это позволило нашему проекту правильно проанализировать и получить правильный анализ покрытия кода.

+0

Я думаю, что поставщики по умолчанию исключены из анализа покрытия кода в Symfony2. Моя проблема очень странная ... – Renrhaf

Смежные вопросы