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.

テストを実行するとき、それらのテストを実行する前に、追加のブートストラップ作業を行う必要がある場合があります。たとえば、機能テストを実行していて、新しい翻訳リソースを導入した場合、それらのテストを実行する前にキャッシュをクリアする必要があります。

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

Symfony Flex を使用してテストをインストールすると、テストの前に PHPUnit によって実行される te​​sts/bootstrap.php ファイルが既に作成されています。

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:

Symfony Flex を使用しない場合は、このファイルが phpunit.xml.dist ファイルで bootstrap ファイルとして設定されていることを確認してください。
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:

これで、phpunit.xml.dist ファイルを更新して、tests/bootstrap.php に導入された customenvironment 変数を宣言できます。
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.

これで、 vendor/bin/phpunit を実行すると、すべてのテストを実行する前に、ブートストラップ ファイルによってキャッシュが自動的にクリアされます。