I'm having issues finding the source of an error I'm receiving in PHPUnit. If I run phpunit with no filter I will receive the "bytes exhausted" error.
however if I run my tests one at a time with phpunit --filter test_name - all of my test will pass.
The stack trace posted below indicates a problem with one of my tests called KInit however if run that test by itself everything passes.
I have also tried to move the test out of the directory but the error will simply point to the next test that is run. I have also tried running with sudo which did not work any better.
How can I get more information on whats happening here?
I'm running PHPUint to test a laravel 4.2 app.
versions of stuff
PHPUnit 4.1.4
PHP 5.5.18
Ubuntu 12.04 64-bit
The stack trace below says the error is in:
laravel/framework/src/Illuminate/Filesystem/Filesystem.php
however sometimes it reads
/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php
Full stack trace:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 15886 bytes) in /opt/pplus/laravel/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php on line 31
PHP Stack trace:
PHP 1. {main}() /usr/local/bin/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() /usr/local/bin/phpunit:586
PHP 3. PHPUnit_TextUI_Command->run() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:132
PHP 4. PHPUnit_TextUI_TestRunner->doRun() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:179
PHP 5. PHPUnit_Framework_TestSuite->run() phar:///usr/local/bin/phpunit/phpunit/TextUI/TestRunner.php:426
PHP 6. PHPUnit_Framework_TestSuite->run() phar:///usr/local/bin/phpunit/phpunit/Framework/TestSuite.php:675
PHP 7. PHPUnit_Framework_TestSuite->run() phar:///usr/local/bin/phpunit/phpunit/Framework/TestSuite.php:675
PHP 8. PHPUnit_Framework_TestCase->run() phar:///usr/local/bin/phpunit/phpunit/Framework/TestSuite.php:675
PHP 9. PHPUnit_Framework_TestResult->run() phar:///usr/local/bin/phpunit/phpunit/Framework/TestCase.php:758
PHP 10. PHPUnit_Framework_TestCase->runBare() phar:///usr/local/bin/phpunit/phpunit/Framework/TestResult.php:686
PHP 11. KInitTest->setUp() phar:///usr/local/bin/phpunit/phpunit/Framework/TestCase.php:818
PHP 12. TestCase->setUp() /opt/pplus/laravel/app/tests/unit/classes/KInit/KInitTest.php:16
PHP 13. Illuminate\Foundation\Testing\TestCase->setUp() /opt/pplus/laravel/app/tests/TestCase.php:35
PHP 14. Illuminate\Foundation\Testing\TestCase->refreshApplication() /opt/pplus/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:31
PHP 15. TestCase->createApplication() /opt/pplus/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:42
PHP 16. require() /opt/pplus/laravel/app/tests/TestCase.php:17
PHP 17. require() /opt/pplus/laravel/bootstrap/start.php:60
PHP 18. Illuminate\Foundation\ProviderRepository->load() /opt/pplus/laravel/vendor/laravel/framework/src/Illuminate/Foundation/start.php:210
PHP 19. Illuminate\Foundation\ProviderRepository->loadManifest() /opt/pplus/laravel/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php:51
PHP 20. Illuminate\Filesystem\Filesystem->get() /opt/pplus/laravel/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php:187
PHP 21. file_get_contents() /opt/pplus/laravel/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:31
I found the answer. I had to increase the memory_limit in /etc/php5/cli/php.ini. I always forget the phpunit uses a different ini file than apache.
Related
For complicated reasons, I'm trying to get a Laravel project running that I did not develop. I'm using a Vagrant/Homestead combination (Host Windows 10, VM Homestead v2.1.8 (Ubuntu 18.04.1) with Laravel 5.0.35, PHP 5.6 - that's what it was created in) and after putting the project there and running composer install, I just tried to have a look at the routes via
php artisan route:list
which gave me the error
PHP Fatal error: Call to a member function make() on null in /home/vagrant/code/newbackend/vendor/compiled.php on line 4823
PHP Stack trace:
PHP 1. {main}() /home/vagrant/code/newbackend/artisan:0
PHP 2. Illuminate\Foundation\Console\Kernel->handle() /home/vagrant/code/newbackend/artisan:36
PHP 3. Symfony\Component\Console\Application->run() /home/vagrant/code/newbackend/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:94
PHP 4. Symfony\Component\Console\Application->doRun() /home/vagrant/code/newbackend/vendor/symfony/console/Symfony/Component/Console/Application.php:126
PHP 5. Symfony\Component\Console\Application->doRunCommand() /home/vagrant/code/newbackend/vendor/symfony/console/Symfony/Component/Console/Application.php:195
PHP 6. Illuminate\Console\Command->run() /home/vagrant/code/newbackend/vendor/symfony/console/Symfony/Component/Console/Application.php:874
PHP 7. Symfony\Component\Console\Command\Command->run() /home/vagrant/code/newbackend/vendor/laravel/framework/src/Illuminate/Console/Command.php:101
PHP 8. Illuminate\Console\Command->execute() /home/vagrant/code/newbackend/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:257
PHP 9. Illuminate\Container\Container->call() /home/vagrant/code/newbackend/vendor/laravel/framework/src/Illuminate/Console/Command.php:115
PHP 10. call_user_func_array:{/home/vagrant/code/newbackend/vendor/compiled.php:964}() /home/vagrant/code/newbackend/vendor/compiled.php:964
PHP 11. Illuminate\Foundation\Console\RouteListCommand->fire() /home/vagrant/code/newbackend/vendor/compiled.php:964
PHP 12. Illuminate\Foundation\Console\RouteListCommand->getRoutes() /home/vagrant/code/newbackend/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php:75
PHP 13. Illuminate\Foundation\Console\RouteListCommand->getRouteInformation() /home/vagrant/code/newbackend/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php:89
PHP 14. Illuminate\Foundation\Console\RouteListCommand->getMiddleware() /home/vagrant/code/newbackend/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php:109
PHP 15. Illuminate\Foundation\Console\RouteListCommand->getControllerMiddleware() /home/vagrant/code/newbackend/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php:142
PHP 16. Illuminate\Foundation\Application->make() /home/vagrant/code/newbackend/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php:161
PHP 17. Illuminate\Container\Container->make() /home/vagrant/code/newbackend/vendor/compiled.php:1543
PHP 18. Illuminate\Container\Container->build() /home/vagrant/code/newbackend/vendor/compiled.php:1019
PHP 19. Illuminate\Container\Container->getDependencies() /home/vagrant/code/newbackend/vendor/compiled.php:1081
PHP 20. Illuminate\Container\Container->resolveClass() /home/vagrant/code/newbackend/vendor/compiled.php:1095
PHP 21. Illuminate\Foundation\Application->make() /home/vagrant/code/newbackend/vendor/compiled.php:1111
PHP 22. Illuminate\Container\Container->make() /home/vagrant/code/newbackend/vendor/compiled.php:1543
PHP 23. Illuminate\Container\Container->fireResolvingCallbacks() /home/vagrant/code/newbackend/vendor/compiled.php:1029
PHP 24. Illuminate\Container\Container->fireCallbackArray() /home/vagrant/code/newbackend/vendor/compiled.php:1180
PHP 25. Illuminate\Validation\ValidationServiceProvider->Illuminate\Validation\{closure}() /home/vagrant/code/newbackend/vendor/compiled.php:1195
PHP 26. Illuminate\Foundation\Http\FormRequest->validate() /home/vagrant/code/newbackend/vendor/compiled.php:4699
PHP 27. Illuminate\Foundation\Http\FormRequest->getValidatorInstance() /home/vagrant/code/newbackend/vendor/compiled.php:4772
The error leads me to
$factory = $this->container->make('Illuminate\\Validation\\Factory');
in class FormRequest (extends Request implements ValidatesWhenResolved) on line 4823 in vendor/compiled.php - but that's not telling me much.
As I'm new to Php/laravel and don't quite have a handle on the intricacies of this project, my googling efforts left me more confused than ever. Does anyone have at least a starting point for me on how to resolve this?
I'm having a bit of a problem with Laravel's artisan commands and more specifically with artisan route:list. When I execute this command, the result is the following :
PHP Fatal error: Maximum function nesting level of '256' reached, aborting! in /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 950
PHP Stack trace:
PHP 1. {main}() /Users/sa7bi/Code/smartly/artisan:0
PHP 2. Illuminate\Foundation\Console\Kernel->handle() /Users/sa7bi/Code/smartly/artisan:35
PHP 3. Symfony\Component\Console\Application->run() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:123
PHP 4. Symfony\Component\Console\Application->doRun() /Users/sa7bi/Code/smartly/vendor/symfony/console/Application.php:120
PHP 5. Symfony\Component\Console\Application->doRunCommand() /Users/sa7bi/Code/smartly/vendor/symfony/console/Application.php:189
PHP 6. Illuminate\Console\Command->run() /Users/sa7bi/Code/smartly/vendor/symfony/console/Application.php:826
PHP 7. Symfony\Component\Console\Command\Command->run() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Console/Command.php:167
PHP 8. Illuminate\Console\Command->execute() /Users/sa7bi/Code/smartly/vendor/symfony/console/Command/Command.php:262
PHP 9. Illuminate\Container\Container->call() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Console/Command.php:182
PHP 10. Illuminate\Container\BoundMethod::call() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Container/Container.php:524
PHP 11. Illuminate\Container\BoundMethod::callBoundMethod() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:30
PHP 12. value() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:86
PHP 13. Illuminate\Container\BoundMethod::Illuminate\Container\{closure}() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Support/helpers.php:912
PHP 14. call_user_func_array:{/Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:28}() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:28
PHP 15. Illuminate\Foundation\Console\RouteListCommand->fire() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:28
PHP 16. Illuminate\Foundation\Console\RouteListCommand->getRoutes() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php:75
PHP 17. Illuminate\Support\Collection->map() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php:87
PHP 18. array_map() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Support/Collection.php:636
PHP 19. Illuminate\Foundation\Console\RouteListCommand->Illuminate\Foundation\Console\{closure}() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Support/Collection.php:636
PHP 20. Illuminate\Foundation\Console\RouteListCommand->getRouteInformation() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php:86
PHP 21. Illuminate\Foundation\Console\RouteListCommand->getMiddleware() /Users/sa7bi/Code/smartly/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php:114
I've tried bumping up the number of nested level with xdebug.max_nesting_level but without success.
The link to my repo is here if anyone is intested.
This might help: https://stackoverflow.com/a/30839127/4617687
Apparently changing this value at runtime also helps.
I know, isnt as if Composer or Travis not work, I do not get to do that work fine, I do not understand how autoload runs locally but not in Travis build.
If someone could shed light on this problem that I have, I would be very grateful.
The problem specifically is displayed when you can not find an interface ...
as the error pops up when you do not see the "namespace\namespace\interface", I think that should be the autoload, should not be loading very well for the test in Travis.
Here is:
PHP Fatal error: Interface 'RestGalleries\Interfaces\User' not found in /home/travis/build/estebanmatias92/RestGalleries/src/RestGalleries/APIs/Flickr/FlickrUser.php on line 15
PHP Stack trace:
PHP 1. {main}() /home/travis/.phpenv/versions/5.4.25/bin/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() /home/travis/.phpenv/versions/5.4.25/bin/phpunit:46
PHP 3. PHPUnit_TextUI_Command->run() /home/travis/.phpenv/versions/5.4.25/share/pyrus/.pear/php/PHPUnit/TextUI/Command.php:129
PHP 4. PHPUnit_TextUI_TestRunner->doRun() /home/travis/.phpenv/versions/5.4.25/share/pyrus/.pear/php/PHPUnit/TextUI/Command.php:176
PHP 5. PHPUnit_Framework_TestSuite->run() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php:349
PHP 6. PHPUnit_Framework_TestSuite->run() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php:705
PHP 7. PHPUnit_Framework_TestSuite->run() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php:705
PHP 8. PHPUnit_Framework_TestSuite->runTest() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php:745
PHP 9. PHPUnit_Framework_TestCase->run() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php:775
PHP 10. PHPUnit_Framework_TestResult->run() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/Framework/TestCase.php:783
PHP 11. PHPUnit_Framework_TestCase->runBare() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/Framework/TestResult.php:648
PHP 12. PHPUnit_Framework_TestCase->runTest() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/Framework/TestCase.php:838
PHP 13. ReflectionMethod->invokeArgs() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/Framework/TestCase.php:983
PHP 14. RestGalleriesTest->testFindUserReturnApiUserObject() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/Framework/TestCase.php:983
PHP 15. Composer\Autoload\ClassLoader->loadClass() /home/travis/build/estebanmatias92/RestGalleries/vendor/phpunit/phpunit/PHPUnit/Framework/TestCase.php:0
PHP 16. Composer\Autoload\includeFile() /home/travis/build/estebanmatias92/RestGalleries/vendor/composer/ClassLoader.php:269
PHP 17. include() /home/travis/build/estebanmatias92/RestGalleries/vendor/composer/ClassLoader.php:363
Frankly I can not think it can be right now. I leave my code on github and the failing build (Until the time, i have failed at all with this, but leave the last build to see).
Github: https://github.com/estebanmatias92/RestGalleries
Travis CI build: https://travis-ci.org/estebanmatias92/RestGalleries/jobs/19337261
Are you are working on OSX which has case-insensitive filesystem by default? Try renaming the folder interfaces to Interfaces.
I have a PHPUnit test suite that is currently causing a fatal error due to a class definition that's not being found. This, ultimately, is a failure of the testing code itself and a failure by the developer to vindicate the test itself before committing code.
However, things like this do happen from time to time, and it would be wonderful if, when a fatal error occurs (regardless of who's ultimately responsible), the test simply be marked as a failure, and the remainder of the test suite still be executed.
I have read about the --process-isolation switch and as far as I can tell, it should take care of this. Since each test runs in a separate process, if the child dies due to a fatal error, the parent can still continue to run. In fact, this is stated explicitly in this answer to a similar question: https://stackoverflow.com/a/5340151/84762 which shows the exact type of output I would like to see myself.
However, I seem to get the exact same output regardless of whether or not I use the --process-isolation flag:
WITHOUT process isolation
[kogi#phagocyte ~]$ /usr/bin/phpunit --colors --verbose --coverage-html "target/coverage" ~/app/zend/tests/application/
PHP Fatal error: Class 'Rmd_Database_OldObject' not found in /home/kogi/app/zend/private/models/translate/Poll.php on line 9
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/pear/PHPUnit/TextUI/Command.php:130
PHP 4. PHPUnit_Runner_BaseTestRunner->getTest() /usr/share/pear/PHPUnit/TextUI/Command.php:150
PHP 5. PHPUnit_Framework_TestSuite->addTestFiles() /usr/share/pear/PHPUnit/Runner/BaseTestRunner.php:96
PHP 6. PHPUnit_Framework_TestSuite->addTestFile() /usr/share/pear/PHPUnit/Framework/TestSuite.php:419
PHP 7. PHPUnit_Util_Fileloader::checkAndLoad() /usr/share/pear/PHPUnit/Framework/TestSuite.php:358
PHP 8. PHPUnit_Util_Fileloader::load() /usr/share/pear/PHPUnit/Util/Fileloader.php:79
PHP 9. include_once() /usr/share/pear/PHPUnit/Util/Fileloader.php:95
PHP 10. require_once() /home/kogi/app/zend/tests/application/translate/PollTest.php:11
Fatal error: Class 'Rmd_Database_OldObject' not found in /home/kogi/app/zend/private/models/translate/Poll.php on line 9
Call Stack:
0.0003 91584 1. {main}() /usr/bin/phpunit:0
0.0076 612672 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:46
0.0076 613744 3. PHPUnit_TextUI_Command->run() /usr/share/pear/PHPUnit/TextUI/Command.php:130
0.0246 1249464 4. PHPUnit_Runner_BaseTestRunner->getTest() /usr/share/pear/PHPUnit/TextUI/Command.php:150
0.0706 1626680 5. PHPUnit_Framework_TestSuite->addTestFiles() /usr/share/pear/PHPUnit/Runner/BaseTestRunner.php:96
0.1691 8053584 6. PHPUnit_Framework_TestSuite->addTestFile() /usr/share/pear/PHPUnit/Framework/TestSuite.php:419
0.1693 8057320 7. PHPUnit_Util_Fileloader::checkAndLoad() /usr/share/pear/PHPUnit/Framework/TestSuite.php:358
0.1694 8057664 8. PHPUnit_Util_Fileloader::load() /usr/share/pear/PHPUnit/Util/Fileloader.php:79
0.1711 8240600 9. include_once('/home/kogi/app/zend/tests/application/translate/PollTest.php') /usr/share/pear/PHPUnit/Util/Fileloader.php:95
0.1805 9187768 10. require_once('/home/kogi/app/zend/private/models/translate/Poll.php') /home/kogi/app/zend/tests/application/translate/PollTest.php:11
WITH process isolation
[kogi#phagocyte ~]$ /usr/bin/phpunit --colors --verbose --coverage-html "target/coverage" --process-isolation ~/app/zend/tests/application/
PHP Fatal error: Class 'Rmd_Database_OldObject' not found in /home/kogi/app/zend/private/models/translate/Poll.php on line 9
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/pear/PHPUnit/TextUI/Command.php:130
PHP 4. PHPUnit_Runner_BaseTestRunner->getTest() /usr/share/pear/PHPUnit/TextUI/Command.php:150
PHP 5. PHPUnit_Framework_TestSuite->addTestFiles() /usr/share/pear/PHPUnit/Runner/BaseTestRunner.php:96
PHP 6. PHPUnit_Framework_TestSuite->addTestFile() /usr/share/pear/PHPUnit/Framework/TestSuite.php:419
PHP 7. PHPUnit_Util_Fileloader::checkAndLoad() /usr/share/pear/PHPUnit/Framework/TestSuite.php:358
PHP 8. PHPUnit_Util_Fileloader::load() /usr/share/pear/PHPUnit/Util/Fileloader.php:79
PHP 9. include_once() /usr/share/pear/PHPUnit/Util/Fileloader.php:95
PHP 10. require_once() /home/kogi/app/zend/tests/application/translate/PollTest.php:11
Fatal error: Class 'Rmd_Database_OldObject' not found in /home/kogi/app/zend/private/models/translate/Poll.php on line 9
Call Stack:
0.0003 91752 1. {main}() /usr/bin/phpunit:0
0.0076 612824 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:46
0.0076 613896 3. PHPUnit_TextUI_Command->run() /usr/share/pear/PHPUnit/TextUI/Command.php:130
0.0246 1250360 4. PHPUnit_Runner_BaseTestRunner->getTest() /usr/share/pear/PHPUnit/TextUI/Command.php:150
0.0708 1627528 5. PHPUnit_Framework_TestSuite->addTestFiles() /usr/share/pear/PHPUnit/Runner/BaseTestRunner.php:96
0.1688 8054296 6. PHPUnit_Framework_TestSuite->addTestFile() /usr/share/pear/PHPUnit/Framework/TestSuite.php:419
0.1690 8057992 7. PHPUnit_Util_Fileloader::checkAndLoad() /usr/share/pear/PHPUnit/Framework/TestSuite.php:358
0.1691 8058336 8. PHPUnit_Util_Fileloader::load() /usr/share/pear/PHPUnit/Util/Fileloader.php:79
0.1707 8241296 9. include_once('/home/kogi/app/zend/tests/application/translate/PollTest.php') /usr/share/pear/PHPUnit/Util/Fileloader.php:95
0.1801 9188464 10. require_once('/home/kogi/app/zend/private/models/translate/Poll.php') /home/kogi/app/zend/tests/application/translate/PollTest.php:11
For those of us that can't effectively diff in our heads, the two outputs are literally identical (other than the execution time and memory usage which is negligibly different).
In both cases, the fatal error kills the entire test suite. In this particular case, this happens in the 3rd test and the remaining 150 tests (in several other files/suites) are never executed.
What am I doing wrong here? Is there some other way to survive a fatal error (marking the test as failed) in one test and still execute remaining tests?
EDIT
I am using PHPUnit 3.6.10
EDIT
Comments on the answer to this question have inspired a new ticket on PHPUnit's GitHub page: https://github.com/sebastianbergmann/phpunit/issues/545
PHPUnit loads each test file that will be run before running any tests. This causes PHP to parse these files and execute their top-level code. If any class is loaded that, for example, extends a class that doesn't exist, you'll get a fatal error.
I don't see any way around this without enhancing PHPUnit to parse the files without executing their code during the scanning process.
I am running Zend Framework 1.10 on Ubuntu 10.04, just installed Xdebug to generate code coverage, via PECL.
If I run phpunit like so:
$ phpunit --coverage-html ~/coverage
It works just fine. Unittests run, then code coverage output is generated. No error messages or warnings.
But if I do:
$ phpunit
The tests run fine, but when code coverage begins, I get this:
Generating code coverage report, this may take a moment.PHP Warning: mkdir(): Permission denied in /usr/share/php/PHPUnit/Util/Filesystem.php on line 209
PHP Stack trace:
PHP 1. {main}() /usr/bin/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52
PHP 3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:147
PHP 4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:214
PHP 5. PHPUnit_Util_Report::render() /usr/share/php/PHPUnit/TextUI/TestRunner.php:479
PHP 6. PHPUnit_Util_Filesystem::getDirectory() /usr/share/php/PHPUnit/Util/Report.php:87
PHP 7. mkdir() /usr/share/php/PHPUnit/Util/Filesystem.php:209
Warning: mkdir(): Permission denied in /usr/share/php/PHPUnit/Util/Filesystem.php on line 209
Call Stack:
0.0003 322324 1. {main}() /usr/bin/phpunit:0
0.0521 4658252 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52
0.0521 4658716 3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:147
0.5944 12773356 4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:214
37.1550 24746768 5. PHPUnit_Util_Report::render() /usr/share/php/PHPUnit/TextUI/TestRunner.php:479
37.1550 24746768 6. PHPUnit_Util_Filesystem::getDirectory() /usr/share/php/PHPUnit/Util/Report.php:87
37.1560 24746984 7. mkdir() /usr/share/php/PHPUnit/Util/Filesystem.php:209
Before I installed Xdebug, running phpunit without any arguments worked just fine.
I presume this is just a silly permissioning problem stemming from my PECL installation of Xdebug, but it looks like everything in /usr/share/php/phpunit is supposed to be permissioned as root, soooooo...any ideas?
The error message just tells you that mkdir can't create a folder somewhere but not where it is trying to do so.
I would assume you have an phpunit.xml.dist in which a <logger> of the type coverage-html is defined with a target that doesn't exist on your machine which your current user doesn't have write access too.
PHPUnit doesn't try to generate a coverage report without somneone telling it do and if you don't do it on the cli a phpunit.xml is the only option left.