How to Customize the Bootstrap Process before Running Tests

5.1 version

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).

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.