Adam Russell
Adam Russell

Reputation: 171

PHPUnit fails silenlty

when i run $ phpunit alone it fails silently and this is what i tried to know what the problem is with no luck:

$ phpunit
$ echo $?
=> 255

$ php -i | grep error

display_errors => STDOUT => STDOUT
display_startup_errors => On => On
error_append_string => no value => no value
error_log => /usr/local/var/log/php_error.log => /usr/local/var/log/php_error.log
error_prepend_string => no value => no value
error_reporting => 32767 => 32767
html_errors => Off => Off
ignore_repeated_errors => Off => Off
log_errors => On => On
log_errors_max_len => 1024 => 1024
track_errors => On => On
xmlrpc_error_number => 0 => 0
xmlrpc_errors => Off => Off
xdebug.force_display_errors => On => On
xdebug.force_error_reporting => 1 => 1
xdebug.show_error_trace => Off => Off
opcache.error_log => no value => no value


phpunit --version
PHPUnit 6.0-g969991b by Sebastian Bergmann and contributors.


php --version
PHP 7.0.10-1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.10-1, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans

checking for syntax errors, return everything is ok:

for f in $(find tests/)
> do php -l $f
> done
...

as a temporary workaround, i run all tests as follow

find . -name "*_Test.php" -type f -exec phpunit {} \;

php_error.log has no log entry, and to make sure nothing is writting on the file:

$ truncate -s0 /usr/local/var/log/php_error.log
$ phpunit
$ tail /usr/local/var/log/php_error.log

and i do have write access to do log file: -rw-rw-r-- 1 adam adam 0 Sep 2 11:49 /usr/local/var/log/php_error.log

and to be safe:

$ php -r "error_log('am i logged?');"
$ tail /usr/local/var/log/php_error.log
[02-Sep-2016 13:16:37 Europe/Paris] am i logged?

when i do phpunit tests/* only files on the root directory tests are running, phpunit does not go recursively

this is phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         bootstrap="bootstrap.php"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix=".php">./tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

and this is the content of the bootstrap.php file

<?php

//
// Author: Oussama Elgoumri
// Email : [email protected]
//
// Wed Aug 31 17:13:04 WEST 2016
//


require_once __DIR__ . '/vendor/autoload.php';
require_once dirname(dirname(__FILE__)) . '/wp-load.php';
require_once ABSPATH . 'wp-admin/includes/admin.php';


use Dotenv\Dotenv;


do_action('admin_init');

(new Dotenv(__DIR__))
    ->load();

i know there is no errors, which is weird, echo $? return 255 after running phpunit, because when i run

psysh bootstrap.php it works with no errors

i'll appreciate any help, even if it's hacki, i just want to run test coverage, and produce a report. thank you

UPDATE

as a temporary workarround i run all tests using this command: find . -name "*_Test.php" -type f -exec phpunit {} \;

test single file

$ phpunit tests/Upload__FN_Test.php
PHPUnit 5.5.4 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 1.27 seconds, Memory: 24.00MB

OK (1 test, 1 assertion)

test all files in a directory the directory should NOT contain subdirectories otherwise it will fail as explained above with 255 error

$ phpunit tests/src/Uptobox/Workflow_PHP/
PHPUnit 5.5.4 by Sebastian Bergmann and contributors.

.....                                                               5 / 5 (100%)

Time: 7.03 seconds, Memory: 26.00MB

OK (5 tests, 6 assertions)

test files within a directory with test coverage

$ phpunit tests/src/Uptobox/Workflow_PHP/ --coverage-text --whitelist src/Uptobox/Uptobox.php
PHPUnit 5.5.4 by Sebastian Bergmann and contributors.

.....                                                               5 / 5 (100%)

Time: 6.93 seconds, Memory: 28.00MB

OK (5 tests, 6 assertions)


Code Coverage Report:    
  2016-09-02 12:35:00    

 Summary:                
  Classes:  0.00% (0/1)  
  Methods: 75.00% (3/4)  
  Lines:   90.91% (10/11)

\App\Uptobox::Uptobox
  Methods:  75.00% ( 3/ 4)   Lines:  90.91% ( 10/ 11)

What i notice so far is as long as the target directory does not contain any subdirectories, phpunit process all test files within that directory, otherwise it fails silently.

Upvotes: 4

Views: 317

Answers (1)

DrDamnit
DrDamnit

Reputation: 4826

Your directory suffix is probably wrong.

Here: you are trying to execute every php file as a test:

<testsuites>
    <testsuite name="Application Test Suite">
        <directory suffix=".php">./tests</directory>
    </testsuite>
</testsuites>

But here you're restricting it to "*_Test.php"

find . -name "*_Test.php" -type f -exec phpunit {} \;

Try:

<testsuites>
    <testsuite name="Application Test Suite">
        <directory suffix="Test.php">./tests</directory>
    </testsuite>
</testsuites>

Upvotes: 0

Related Questions