Chapter 11

ユーザー系画面の機能テストを作成

たつきち
たつきち
2022.07.30に更新

この章に対応するコミット

ユーザー系画面の機能テストを作成

さて、とても長かったですが、ここまででやっと UserController が完成しましたので、機能テストを書いていきます💪

Symfonyでは、FrameworkBundleが提供してくれる WebTestCase クラスを使って、コントローラの各アクションを実行して出力結果をチェックすることで機能テストを行います。

実際にアプリ全体を動かしてコントローラにアクセスするわけなので、機能テストを実行するには、事前にデータベースにテストケースとなるデータを投入しておく必要があります。

テストデータの準備には LiipTestFixturesBundle を利用するのが一般的です。これを使うと、テストデータをyamlフィクスチャで定義できて便利です。

参考記事

Symfonyの機能テストの基本のキについては以下の公式ドキュメントをご参照ください。

Testing (Symfony Docs)

LiipTestFixturesBundleを使って実際に機能テストを実行するまでの手順は以下の過去記事にまとめてあります。

Symfony4+LiipTestFixturesBundleでyamlフィクスチャを使って機能テストを行う手順【完全版】

また、ログイン後の画面の機能テストを行う方法については以下の過去記事にまとめてあります。

Symfonyでログイン後の画面を機能テストする方法【簡単です】

さらに、Symfony 4.4以降での機能テストにおける注意点について以下の過去記事で解説しています。

[Symfony] 機能テストでcreateClinet()を複数回実行するのはSymfony 4.4以降で非推奨になっているので注意

実際のテストコード

全文貼り付けるにはあまりにも分量が多いので、デモアプリのテストコード を見てみてください🙏

デモアプリは日本語と英語に対応するためURLが /ja/ または /en/ で始まるようになっており、機能テストは英語UI向けに書かれています。

分量は多いですが、やっていることは単純です。上記の参考記事を読んだ上でコードを見れば、何をやっているかすべて理解できるはずです💪

テストの実行結果

$ bin/phpunit
PHPUnit 9.4.3 by Sebastian Bergmann and contributors.

Testing
...........                                                       11 / 11 (100%)

Time: 00:33.423, Memory: 62.50 MB

OK (11 tests, 82 assertions)

こんな感じでちゃんとグリーンになりました🙌