4.7.8 ウェブテスト - ビューのテスト
CakePHP でのプロジェクトは、ほとんど全てがウェブアプリケーションです。単体テストにおいて、小分けにした機能のテストがうまくいったら、それより大きなスケールでの機能をテストしたくなるでしょう。「CakeWebTestCase」クラスは、ユーザの視点からこのテストを行う優れた方法を提供します。
4.7.8.1 CakeWebTestCase について
CakeWebTestCase は、SimpleTest の WebTestCase をただ拡張したもので、特に機能追加はありません。SimpleTest の Web testing に関する文書中に記載がある全ての機能は、 CakeWebTestCase で利用できます。これはまた、 SimpleTest が持つ機能以外のものは使えないことを意味します。すなわち、 CakeWebTestCase においてフィクスチャは利用できず、テストケースにデータベースに対する更新や保存が含まれていた場合、恒久的にデータベースの値が変更されることを意味します。テストの結果は、しばしばデータベースが持つ値に基づくので、テスト手順の一部としてデータベースが期待した値を持つことを確認してください。
4.7.8.2 テストの作成
ウェブテストを実行したい場合、まず CakeTestCase の代わりに CakeWebTestCase を拡張したクラスを必ず用意してください。
class CompleteWebTestCase extends CakeWebTestCase
class CompleteWebTestCase extends CakeWebTestCase
テストを開始する前に何か準備を行う必要があれば、コンストラクタを作成してください。
function CompleteWebTestCase(){
//テスト開始前の準備をここで行う
}
function CompleteWebTestCase(){//テスト開始前の準備をここで行う}
実際にテストケースを書く場合、まずは出力結果を取得することから始めます。出力結果を得るためには get もしくは post のリクエストを行うのですが、これには get() と post() 関数をそれぞれ使用します。これらの関数は両方とも、第一引数として完全な URL を必要とします。URL は、もしテストのスクリプトが http://ドメイン名/cake/folder/webroot/test.php であるとすると、次のようにすることで動的に取得できます。
$this->baseurl = current(split("webroot", $_SERVER['PHP_SELF'])); $this->baseurl = current(split("webroot", $_SERVER['PHP_SELF']));
Cake 流の URL を用いて get や post を行うには、次のようにします。
$this->get($this->baseurl."/products/index/"); $this->post($this->baseurl."/customers/login", $data);
$this->get($this->baseurl."/products/index/");$this->post($this->baseurl."/customers/login", $data);
post メソッドの第二引数 $data は、Cake フォーマットのデータを含む、 post するデータを連想配列にしたものです。
$data = array( "data[Customer][mail]" => "user@user.com", "data[Customer][password]" => "userpass");
$data = array("data[Customer][mail]" => "user@user.com","data[Customer][password]" => "userpass");
ページをリクエストしたら、標準的な SimpleTest ウェブテストのメソッドを用いて、全ての種類のアサーションを行うことが可能です。
4.7.8.3 ページ全体を確認する
CakeWebTest は、ハイパーリンクや画像をクリックすることでページ全体をナビゲートする手段も提供します。詳しくは、 SimpleTest の文書を参照してください。
