-
Notifications
You must be signed in to change notification settings - Fork 132
テストコードの追加と実行
baserCMS では、PHPUnit と統合された、CakePHPのテストフレームワークを利用する事ができます。
テストを実行する為には、PHPUnit のインストール、テスト用データベースのセットアップ等が必要となりますが、環境構築ツール
Docker を利用する事で煩雑な作業をショートカットする事ができます。
baserCMS のパッケージをクローンしてからテストを実行する為に必要な作業は次の3つです。
- Docker を起動する
- baserCMSのインストールを完了する
- デバッグモードに切り替える
不特定多数の開発者が関わるアプリケーションの開発では、自分が送ったプログラムコードの影響範囲がわからないので、非常にシビアになる必要がありますが、baserCMSの開発環境では、GitHub と連携して継続的インテグレーションツールである TravisCI を利用しており、プルリクエストを送信する度に、コマンドラインで全てのテストが自動実行される仕組みになっているので安心です。
baserCMSプロジェクトにプルリクエストを送る際には、二度手間にならないよう、ご自分の開発環境でテストを実行しておきましょう。
また、新機能を追加した際、コントローラー以外の新しいクラスを作成したり、新しいメソッドを追加しているのであれば、テストケースを含めた上でプルリクエストを送ってください。
※ コントローラーのテストは現在準備中です。
baserCMSにおけるテストケースの規約は次のとおりです。
1.
テストを含むPHPファイルは、lib/Baser/Test/Case/[Type]/
というディレクトリに置きます。
2. ファイル名の最後は必ずただ .php
とだけ書くのではなく Test.php
とします。
3. テストを含むクラスは必ず、BaserTestCase
を継承します。
4. テストケースのクラスを書いたファイル名はクラス名と同じにします。
5. テストを含むメソッド(つまりアサーションを含むメソッド)はいずれも testPlublished()
といったように 「test」 で始まる名前にします。
テストケースの作成方法については、CakePHPのテスト
を参考にしてください。もちろん、CakePHPのテストで利用できるほとんどの機能が利用できます。
※ コントローラーのテストは現在準備中です。
ブラウザよりテストを実行するには、 debug 設定を 1
に設定した上で、http://[baserCMSの設置場所]/test.php
にアクセスします。
baserCMSのコア と
CakePHPのコア、プラグインのテストスイートを実行できます。それぞれのリンクをクリックするとテストケースを実行し、結果を表示します。
まず、インストールモードに切り替え、リセットを行い、その上で、bc_sample テーマを利用する前提で、Docker
のコマンドライン上でインストールを行います。
この作業を行う事で、テスト環境を統一します。
# Docker を起動
docker-compose start
# Vagrant にログイン
docker exec -it bc-php /bin/bash
# アプリケーションフォルダに移動
cd /var/www/html/app
# baserCMSをリセット
./Console/cake bc_manager reset
# baserCMSをインストール
./Console/cake bc_manager install "https://localhost" "mysql" "admin" "basercms" "[email protected]" --host "bc-db" --database "basercms" --login "root" --password "root" --prefix "mysite_" --data "bc_sample.default"
baserCMSでは、テストを実行するために baserCMS の baser_test シェルを利用します。 baser_test
シェルを使うことで baserCMSのコア と CakePHPのコア、プラグインのテストを簡単に行うことができます。
実行するには、vagrant ssh
コマンドを利用して Vagrant
環境にログインし、/vagrant/app
に移動した上で、以下のようなコマンドを打つ事でテストを実行できます。
# テストを対話形式で選択して実行する
./Console/cake baser_test baser
# 全てのテストを実行する
./Console/cake baser_test baser BcAll
# ヘルパーのテストを実行する
./Console/cake baser_test baser BcAllHelpers
# BcBaserHelper クラスのテストのみ実行する
./Console/cake baser_test baser View/Helper/BcBaserHelper
# BcBaserHlper::testGetMenus() メソッドのテストのみ実行する
./Console/cake baser_test baser View/Helper/BcBaserHelper --filter testGetMenus
もちろん、baserCMS でも CakePHP
同様、テストケース用のデータベースの一時的なデータを提供するフィクスチャを利用する事ができます。フィクスチャを使うことにより、
実際のアプリケーションに使われているデータに惑わされることなくテストができるというメリットがあります。
フィクスチャの利用方法については、CakePHPのフィクスチャ
を参考にしてください。
インストール時の初期データとなるフィクスチャは、Default ディレクトリ内に配置します。
/lib/Baser/Test/Fixture/Default/ModelNameFixture.php
それ以外のバリエーションとなるフィクスチャは、次へ配置します。
Test/Fixture/Path/To/TestClassName/ModelNameVariationNameFixture.php
# BcBaserHelperで利用するFixtureの配置例
/lib/Baser/Test/Fixture/View/Helper/BcBaserHelper/PageSingleFixture.php
/lib/Baser/Test/Fixture/View/Helper/BcBaserHelper/PageDoubleFixture.php
/lib/Baser/Test/Fixture/View/Helper/BcBaserHelper/PageMobileFixture.php
フィクスチャクラスを作成する際には、次のとおりにしてください。
1. フィクスチャとなるクラスは BaserTestFixture
を継承します。
2. $name
プロパティにモデル名を定義します。
3. $fields
プロパティは基本的に定義しません。(
/lib/Baser/Config/Schema/
内のスキーマ情報が自動的にセットされます)
4. $records
プロパティにテストとなるレコードを配列で定義します。
コアプラグインのテストは、コアプラグインのフォルダ内の指定されたディレクトリに作成する事でコアプログラムと同様にテストの実行が行えます。
/lib/Baser/Plugin/PluginName/Test
/Case
/Fixture
ブラウザよりテストを実行するには、
コアプログラムと同様にhttp://[baserCMSの設置場所]/test.php
にアクセスし、対象のテストのリンクをクリックしテストケースを実行します。
コマンドラインからのテストも、コアプログラムと同様に baserCMS の baser_test シェルを利用します。
テスト対象にプラグイン名を明記します。
# フィードプラグインの Feed モデルのテストを実行する
./Console/cake baser_test Feed Model/Feed