PHPUnit coverage on vagrant

Vagrant is the official tool that Laravel supports in the development stage, which means that you can use vagrant and Homestead to create a simple and powerful environment.

Homestead(a box to use with vagrant) has been created to give everything that developers need to run Laravel. Web server, PHP (including extensions), database, cache drivers and so on.

To run vagrant you must use a virtualization provider, such as virtualbox and vmware.

Installing PHPUnit

Homestead doesn’t come with any specific PHPUnit version, which means that you must download yourself the desired version. To keep this post as simple as possible, we are going to consider that the PHPunit is not installed and we are going to use composer to install it.

In an empty directory, create a composer.json file with the following content:

    "name": "vendor/package",
    "description": "phpunit coverage with homestead",
    "require-dev": {
        "phpunit/phpunit": "4.8.*"

After that, run composer install. The command will take some time, and when it finishes you will have a vendor folder inside the current directory.

Running PHPUnit

Finally we can run PHPUnit. Normally we would run phpunit tests/ but as our focus here is to generate the coverage for the source code, we are going to add an extra argument.

phpunit tests/ --coverage-html coverage

The tests will run normally, but a warning will show up. PHPUnit will complain about the xdebug extension. The extension comes disabled because of performance.

PHPUnit 4.8.36 by Sebastian Bergmann and contributors.
Warning:        The Xdebug extension is not loaded
                No code coverage will be generated.

Time: 781 ms, Memory: 4.00MB

To fix that is simple, homestead comes with the extension already, we just need to activate it. The following command enables the xdebug extension in the CLI mode:

sudo ln -s /etc/php/7.1/mods-available/xdebug.ini /etc/php/7.1/cli/conf.d/

Now, try to run PHPunit again, and the message should disappear.

A few considerations before we go

You may have noticed that the command in the previous section uses PHP 7.1, which might not be true for you. As homestead supports various PHP versions you must double check which is the one you want.

Of the most cases, you will change only the version in the command.

PHP 5.6

sudo ln -s /etc/php/5.6/mods-available/xdebug.ini /etc/php/5.6/cli/conf.d/

PHP 7.0

sudo ln -s /etc/php/7.0/mods-available/xdebug.ini /etc/php/7.0/cli/conf.d/

The thing to take home here is the xdebug.ini file. If you know where it is just make a symbolic link to the CLI folder.