EC-CUBE4のCustomizeディレクトリでカスタマイズしたらテストコードを書こう

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 のコントローラーのテストコードを継承してテストコードを書くことをおすすめします。

たまにカスタマイズの影響でデータの登録ができないといったバグが見つかる場合があります。

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください