How to Customize the Bootstrap Process before Running Tests

Sometimes when running tests, you need to do additional bootstrap work before running those tests. For example, if you’re running a functional test and have introduced a new translation resource, then you will need to clear your cache before running those tests.

Symfony already created the following tests/bootstrap.php file when installing the package to work with tests. If you don’t have this file, create it:

// tests/bootstrap.php
use Symfony\Component\Dotenv\Dotenv;

require dirname(__DIR__).'/vendor/autoload.php';

if (file_exists(dirname(__DIR__).'/config/bootstrap.php')) {
    require dirname(__DIR__).'/config/bootstrap.php';
} elseif (method_exists(Dotenv::class, 'bootEnv')) {
    (new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
}

Then, check that your phpunit.xml.dist file runs this bootstrap.php file before running the tests:

1
2
3
4
5
6
7
<!-- phpunit.xml.dist -->
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
    bootstrap="tests/bootstrap.php"
>
    <!-- ... -->
</phpunit>

Now, you can define in your phpunit.xml.dist file which environment you want the cache to be cleared:

1
2
3
4
5
6
7
8
9
<!-- phpunit.xml.dist -->
<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
    <!-- ... -->

    <php>
        <env name="BOOTSTRAP_CLEAR_CACHE_ENV" value="test"/>
    </php>
</phpunit>

This now becomes an environment variable (i.e. $_ENV) that’s available in the custom bootstrap file (tests/bootstrap.php).