-ao- ramune blog

©2021 unio / GO2直営からふるラムネ
対象バージョン
  • Symfony 5.1.5
  • PHPUnit 8.3.5
2020年09月22日

Symfony5のテストでDIコンテナのサービスを使いたい

テストでDIコンテナのサービスを使う

Symfony5のKernelTestCaseを継承して、self::bootKernel()を呼び出すことでDIコンテナを扱えます。

HogeTest.php
                
                    // PHPUnitのTestCaseではなく、SymfonyのKernelTestCaseを使います
                    use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

                    use Symfony\Component\Validator\Validator\ValidatorInterface;

                    class HogeTest extends KernelTestCase
                    {
                        /** @var ValidatorInterface */
                        private $validator;

                        protected function setUp(): void
                        {
                            // テスト用のKernelを起動することで、DIコンテナを使える
                            $kernel = self::bootKernel();
                            $container = $kernel->getContainer();
                            $this->validator = $container->get('validator');
                        }

                        public function testPiyo() { ... }
                    }
                
            

テストを動かすと.envの変数が無いとエラーが発生する場合があります。

                
                    bin/phpunit -v
                
            
                
                    1) App\Tests\HogeTest::testPiyo
                    Symfony\Component\DependencyInjection\Exception\EnvNotFoundException: Environment variable not found: "HOGE_DATABASE_URL".
                
            

その場合は、phpunit.xml.dist<php>内に、.envの変数を設定することで解決します。

phpunit.xml.dist
                
                    <php>
                        ...
                        <!-- define your env variables for the test env here -->
                        <env name="HOGE_DATABASE_URL" value="...."/>
                    </php>
                
            
プロフィール画像
なかのひと:unio

数十年前の牧歌的なインターネッツが好きだった、永遠のモラトリアム人。 ただ、モラトリアムしててもお金は増えないので、しゃかいの厳しさを斜め後ろから眺めつつほそぼそと生活しています。

[広告]