My phpunit.xml
<phpunit
bootstrap="bootstrap.php"
backupGlobals="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
>
<testsuites>
<testsuite>
<directory suffix="Test.php">./tests</directory>
</testsuite>
</testsuites>
<logging>
<log type="coverage-html" target="coverage" lowUpperBound="75" highUpperBound="100" />
</logging>
</phpunit>
My bootstrap.php
:
<?php
/** ---------------------------------------------------- **/
// Require the vendors autoload file.
/** ---------------------------------------------------- **/
require_once 'vendor/autoload.php';
/** ---------------------------------------------------- **/
// We neeed WordPress Bootstrap files for its test.
/** ---------------------------------------------------- **/
define('WP_TEST_DIR', parse_ini_file('test-config.ini')['test-location']);
// Include the bootstrap file.
require_once WP_TEST_DIR . 'includes/bootstrap.php';
// Include the Functions file
require_once WP_TEST_DIR . 'includes/functions.php';
When I run this with the logging section uncommented, I get:
vagrant@vagrant-ubuntu-trusty-64:/vagrant/Freya/Routes$ phpunit
Installing...
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml
Not running ajax tests. To execute these, use --group ajax.
Not running ms-files tests. To execute these, use --group ms-files.
Not running external-http tests. To execute these, use --group external-http.
PHPUnit 4.6.6 by Sebastian Bergmann and contributors.
Configuration read from /vagrant/Freya/Routes/phpunit.xml
...............Killed
When I comment out logging I get:
vagrant@vagrant-ubuntu-trusty-64:/vagrant/Freya/Routes$ phpunit
Installing...
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml
Not running ajax tests. To execute these, use --group ajax.
Not running ms-files tests. To execute these, use --group ms-files.
Not running external-http tests. To execute these, use --group external-http.
PHPUnit 4.6.6 by Sebastian Bergmann and contributors.
Configuration read from /vagrant/Freya/Routes/phpunit.xml
..................................
Time: 9.64 seconds, Memory: 45.50Mb
OK (34 tests, 38 assertions)
Why does it die with no visible errors? is it a memory issue? If so why not say that? These set of tests do include the WordPress test suite class WP_UnitTestCase
to allow me to set up a fake Wordpress install for some of the tests But as you can see the second time I ran the tests with the logging commented out I get 45.50mb memory used. Thats nothing.
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = On
display_startup_errors = Off
Php version is 5.5.9
What is going on? (Yes the coverage folder exists)
Turns out that the dmesg
is showing:
[942618.313174] Out of memory: Kill process 12987 (php) score 384 or sacrifice child
[942618.315188] Killed process 12987 (php) total-vm:453360kB, anon-rss:192380kB, file-rss:12kB
[942757.404416] php5-fpm invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
[942757.404421] php5-fpm cpuset=/ mems_allowed=0
[942757.404424] CPU: 0 PID: 16427 Comm: php5-fpm Tainted: G OX 3.13.0-37-generic #64-Ubuntu
[942757.404426] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[942757.404428] 0000000000000000 ffff88000200d980 ffffffff8171ed09 ffff88001dfbb000
[942757.404431] ffff88000200da08 ffffffff817195c4 0000000000000000 0000000000000000
[942757.404432] 0000000000000000 0000000000000000 0000000000000000 0000000000000000
Would I need to increase the memory of PHP in this case?
I have found the best (only?) way to diagnose fatal errors in PHPUnit is to add an shutdown error trap to the bootstrap. PHPUnit traps errors itself to help with reporting, but for some reason this prevents some core/fatal type errors from being reported at all.
I add this into all my projects:
phpunit.xml:
< phpunit
bootstrap="bootstrap.php"
...
bootstrap.php:
// PHPUnit dies silently with FATAL ERRORS which makes it hard to debug the tests.
register_shutdown_function('PHPUnit_shutdownFunction');
function PHPUnit_shutdownFunction() {
// http://www.php.net/manual/en/errorfunc.constants.php
$error = error_get_last();
if (!is_null($error)){
if($error['type'] & (E_ERROR + E_PARSE + E_CORE_ERROR + E_COMPILE_ERROR + E_USER_ERROR + E_RECOVERABLE_ERROR)){
echo 'Test Bootstrap: Caught untrapped fatal error: ';
var_export($error);
}
}
}
And these mysterious problems with be a thing of the past.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With