automatix
automatix

Reputation: 14532

How to configure PHPUnit to test the whole vendor folder in a ZF2 application?

I'm developing a Zend Framework 2 application with a common folder structure, so that the folder /vendor contains all (project external) libraries. Setting up the unit testing environment I would like to be able to run all vendor tests. The folders structures are different depending on the library. Some packages have no tests at all.

A possible solution would be to create a test suite "vendor" and manually define there the paths to every single test folder, e.g.:

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit ...>
    <testsuites>
        <testsuite name="vendor">
            <directory>../vendor/lib-foo/path/to/tests</directory>
            <directory>../vendor/package-bar/path/to/tests</directory>
            ...
        </testsuite>
        ...
    </testsuites>
    ...
</phpunit>

I don't like this solution. First of all because then I'd have to handle every package manually.

Another solution would be to define /vendor as test folder:

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit ...>
    <testsuites>
        <testsuite name="vendor">
            <directory>../vendor</directory>
            ...
        </testsuite>
        ...
    </testsuites>
    ...
</phpunit>

Well, but then PHPUnit has to scan a lot of folders, that it doesn't need, and the tests will need much more time.

Is there a better solution, that would make possible to automate the process and avoid much manual configuration?

Upvotes: 3

Views: 3420

Answers (1)

helmbert
helmbert

Reputation: 38004

It would probably be difficult to run all PHPUnit vendor test suites with a single test run. One issue is that each of the different test suites might ship its own configuration file or even require a custom bootstrap configuration file. You cannot cover that when running all test suites with a single command.

I'd probably use some shell magic for this. Note that this example relies on the presence of a phpunit.xml(.dist) file in each of your 3rd party packages (for most libraries that's a reasonable assumption). You could even integrate this into your continuous integration process to test this continuously:

for FILE in $(find . -name 'phpunit.xml*') ; do
    sh -c 'cd '$(dirname $FILE)' && composer install'
    vendor/bin/phpunit -c $FILE
done

Upvotes: 1

Related Questions