Skip to content

How to Customize the Bootstrap Process before Running Tests

Warning: You are browsing the documentation for Symfony 5.x, which is no longer maintained.

Read the updated version of this page for Symfony 7.2 (the current stable version).

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.

When installing testing using Symfony Flex, it already created a tests/bootstrap.php file that is run by PHPUnit before your tests.

You can modify this file to add custom logic:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 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');
  }

+ if (isset($_ENV['BOOTSTRAP_CLEAR_CACHE_ENV'])) {
+     // executes the "php bin/console cache:clear" command
+     passthru(sprintf(
+         'APP_ENV=%s php "%s/../bin/console" cache:clear --no-warmup',
+         $_ENV['BOOTSTRAP_CLEAR_CACHE_ENV'],
+         __DIR__
+     ));
+ }

Note

If you don't use Symfony Flex, make sure this file is configured as bootstrap file in your phpunit.xml.dist file:

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 update the phpunit.xml.dist file to declare the custom environment variable introduced to tests/bootstrap.php:

1
2
3
4
5
6
7
8
9
10
<!-- phpunit.xml.dist -->
<?xml version="1.0" encoding="UTF-8" ?>
<phpunit>
    <php>
        <env name="BOOTSTRAP_CLEAR_CACHE_ENV" value="test"/>
        <!-- ... -->
    </php>

    <!-- ... -->
</phpunit>

Now, when running vendor/bin/phpunit, the cache will be cleared automatically by the bootstrap file before running all tests.

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