テストコードの追加と実行

baserCMS では、PHPUnit と統合された、CakePHPのテストフレームワークを利用する事ができます。

テストを実行する為には、PHPUnit のインストール、テスト用データベースのセットアップ等が必要となりますが、開発支援ツール Vagrant を利用する事で煩雑な作業をショートカットする事ができます。
baserCMS のパッケージをクローンしてからテストを実行する為に必要な作業は次の3つです。

  • Vagrant を起動する
  • 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のテストで利用できるほとんどの機能が利用できます。
※ コントローラーのテストは現在準備中です。
 

テストの実行

ブラウザからテストを実行する

ブラウザよりテストを実行するには、 http://[baserCMSの設置場所]/test.php にアクセスします。
baserCMSのコア と CakePHPのコア、プラグインのテストスイートを実行できます。それぞれのリンクをクリックするとテストケースを実行し、結果を表示します。

テスト前の初期化

まず、インストールモードに切り替え、リセットを行い、その上で、nada-icons テーマを利用する前提で、vagrant のコマンドライン上でインストールを行います。
この作業を行う事で、テスト環境を統一します。

# Vagrant を起動
vagrant up
# Vagrant にログイン
vagrant ssh
# アプリケーションフォルダに移動
cd /vagrant/app
# baserCMSをリセット
./Console/cake bc_manager reset
# baserCMSをインストール
./Console/cake bc_manager install "http://192.168.33.10" "mysql" "admin" "basercms" "webmaster@example.org" --host "localhost" --database "basercms" --login "root" --password "root" --prefix "mysite_" --data "nada-icons.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