Chris West
Chris West

Reputation: 741

PHPUnit Code Coverage not working and always saying incorrect whitelist config

Ich checked on several sources on the network and also here on stack overflow but couldn't solve it so far.

Heres my config:

<?xml version="1.0" encoding="UTF-8"?>

<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.0/phpunit.xsd"
     backupGlobals="false"
     colors="true"
     bootstrap="../../src/test.bootstrap.php"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     processIsolation="false"
     stopOnError="false"
     stopOnFailure="false"
     stopOnIncomplete="false"
     stopOnSkipped="false"
     stopOnRisky="false"
     verbose="true"
>
<!--printerFile="vendor/whatthejeff/emoji-phpunit-resultprinter/src/Emoji/PHPUnit/ResultPrinter.php"-->
<!--printerClass="Emoji\PHPUnit\ResultPrinter"-->
<php>
    <ini name="error_reporting" value="-1" />
    <server name="KERNEL_DIR" value="src/" />
    <env name="BOOTSTRAP_CLEAR_CACHE_ENV" value="testing"/>
</php>

<loggin>
    <log type="coverage-html" target="build/coverage"/>
    <log type="coverage-clover" target="build/logs/clover.xml"/>
    <log type="coverage-crap4j" target="build/logs/crap4j.xml"/>
    <log type="junit" target="build/logs/junit.xml" logIncompleteSkipped="false"/>
</loggin>

<testsuites>
    <testsuite name="Project Test Suite">
        <directory>src/*/*Bundle/Tests</directory>
        <directory>src/*/Bundle/*Bundle/Tests</directory>
    </testsuite>
</testsuites>

<filter>
    <whitelist>
        <directory>../src</directory>
        <exclude>
            <directory>src/*/*Bundle/Resources</directory>
            <directory>src/*/*Bundle/Tests</directory>
            <directory>src/*/Bundle/*Bundle/Resources</directory>
            <directory>src/*/Bundle/*Bundle/Tests</directory>
        </exclude>
    </whitelist>
</filter>
</phpunit>

Due to the Build Server limitations I need to call phpunit with the following command:

./build/bin/phpunit.phar -c build/config/phpunit.xml --coverage-clover build/logs/clover.xml --coverage-crap4j build/logs/crap4j.xml --coverage-html build/coverage --coverage-xml build/logs/coverage.xml --log-junit build/logs/junit.xml --testdox-html build/testdox/testdox.html  --testdox-xml build/logs/testdox.xml src/ -v

Everything works except code coverage heres the Result Output:

    PHPUnit 6.1.4 by Sebastian Bergmann and contributors.

    Runtime:       PHP 7.1.5-1+0~20170522123046.25+jessie~1.gbpb8686b with Xdebug 2.6.0-dev
    Configuration: /home/testcase/build-directories/build/config/phpunit.xml
    Error:         Incorrect whitelist config, no code coverage will be generated.

    ..................                                                18 / 18 (100%)

    Time: 945 ms, Memory: 6.00MB

    OK (18 tests, 68 assertions)

I'm a little bit irritated as unit tests itself are working. The Reds Message can be ignored (Hope so) as the Redis server is not yet fully configured.

I'm using oh-unit 6.1.4

Please give me a clue where the error is in my configuration

Upvotes: 4

Views: 7017

Answers (3)

Aryashree Pritikrishna
Aryashree Pritikrishna

Reputation: 351

I have the same issue, so I have update the whitelist directory path in phpunit.xml

    <whitelist>
      <directory>./web/core/includes</directory>
      <directory>./web/core/lib</directory>
      <!-- Extensions can have their own test directories, so exclude those. -->
      <directory>./web/core/modules</directory>
      <exclude>
        <directory>./web/core/modules/*/src/Tests</directory>
        <directory>./web/core/modules/*/tests</directory>
      </exclude>
      <directory>./web/modules</directory>
      <exclude>
        <directory>./web/modules/*/src/Tests</directory>
        <directory>./web/modules/*/tests</directory>
        <directory>./web/modules/*/*/src/Tests</directory>
        <directory>./web/modules/*/*/tests</directory>
      </exclude>
      <directory>./web/sites</directory>
     </whitelist>

Upvotes: 0

Jorrit Schippers
Jorrit Schippers

Reputation: 1655

The directory given in the filter/whitelist/directory XML node is relative to the directory that contains the phpunit configuration file.

I think you should use ../../src.

Upvotes: 1

Alessandro Minoccheri
Alessandro Minoccheri

Reputation: 35973

Try to change the whitelist deirectory into you phpunit with this:

<whitelist>
    <directory suffix=".php">./src</directory>
    <exclude>
        <directory>./src/*/*Bundle/Resources</directory>
        <directory>./src/*/*Bundle/Tests</directory>
        <directory>./src/*/Bundle/*Bundle/Resources</directory>
        <directory>./src/*/Bundle/*Bundle/Tests</directory>
    </exclude>
</whitelist>

Upvotes: 8

Related Questions