EC-CUBE Advent Calendar 2021 5日目の記事です。
EC-CUBE4のCustomizeディレクトリでカスタマイズしたらテストコードを書きましょう。
テストコードを書いておくとEC-CUBEのバージョンアップをしたときなどでバグの早期発見ができるかもしれません。
テストコードの書き方とテストの実行方法は以下のとおりです。
テスト対象の作成
適当にコントローラーを用意します。
app/Customize/Controller/SampleController.phpを作成して以下のコードをコピペしてください。
<?php
namespace Customize\Controller;
use Eccube\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class SampleController extends AbstractController
{
/**
* @Route("/sample", name="sample")
*
* @return Response
*/
public function index(): Response
{
return new Response('sample');
}
}
テストコードの作成
上記コントローラーのページが正しく表示されるかテストするコードを書きます。
app/Customize/Tests/Web/SampleControllerTest.phpを作成して以下のコードをコピペしてください。
<?php
namespace Customize\Tests\Web;
use Eccube\Tests\Web\AbstractWebTestCase;
class SampleControllerTest extends AbstractWebTestCase
{
public function testサンプルページにアクセスできるか()
{
$this->client->request('GET', $this->generateUrl('sample'));
self::assertTrue($this->client->getResponse()->isSuccessful());
}
public function testサンプルページにsampleが表示されるか()
{
$this->client->request('GET', $this->generateUrl('sample'));
self::assertEquals('sample', $this->client->getResponse()->getContent());
}
}
テストコードの抽象クラスについて
上記テストコードは表示系のテストなので AbstractWebTestCase
を継承していますが、管理画面の表示系テストだったら AbstractAdminWebTestCase
、FormType系のテストだったら AbstractTypeTestCase
、機能系テストだったら EccubeTestCase
など、EC-CUBEには様々なテストコードの抽象クラスが用意されています。
- AbstractWebTestCase
- AbstractAdminWebTestCase
- AbstractTypeTestCase
- AbstractShoppingControllerTestCase
- AbstractCommandTest
- EccubeTestCase
これら抽象クラスを継承することでテストコードが楽に書けるようになります。
テスト実行
以下のコマンドを叩いてテストを実行してください。
bin/phpunit app/Customize/Tests/
テストが失敗しなければ以下のように表示されます。
PHPUnit 8.3.5 by Sebastian Bergmann and contributors.
Testing app/Customize/Tests/
.. 2 / 2 (100%)
Time: 1.12 seconds, Memory: 40.50 MB
OK (2 tests, 2 assertions)
いろいろなテストコードの書き方
EC-CUBE 本体のテストコードや PHPUnit マニュアルを参考にしてみてください。
https://github.com/EC-CUBE/ec-cube/tree/4.1/tests/Eccube/Tests
https://phpunit.readthedocs.io/ja/latest/
おすすめのテストコードの書き方
フォーム項目を追加するカスタマイズをした場合は、EC-CUBE のコントローラーのテストコードを継承してテストコードを書くことをおすすめします。
たまにカスタマイズの影響でデータの登録ができないといったバグが見つかる場合があります。