コントローラおよび MVC アプリケーションのテスト 起動用の設定を済ませたら、テストの開始です。 テストの方法は PHPUnit テストスイートによるものとほぼ同じですが、 ちょっとした違いがいくつかあります。 まず、テストケースの dispatch() メソッドを用いてテストの URL をディスパッチしなければなりません。 dispatch('/'); // ... } } ]]> しかし、時にはこれ以外の情報 (GET 変数や POST 変数、 COOKIE 情報など) が必要になることもあります。 これらの情報をリクエストに含めることもできます。 request->setQuery(array( 'foo' => 'bar', 'bar' => 'baz', )); // POST 変数を設定します $this->request->setPost(array( 'baz' => 'bat', 'lame' => 'bogus', )); // クッキーの値を指定します $this->request->setCookie('user', 'matthew'); // あるいは複数の値を指定します $this->request->setCookies(array( 'timestamp' => time(), 'host' => 'foobar', )); // ヘッダを設定することもできます $this->request->setHeader('X-Requested-With', 'XmlHttpRequest'); // リクエストメソッドを設定します $this->request->setMethod('POST'); // ディスパッチします $this->dispatch('/foo/bar'); // ... } } ]]> リクエストが準備できたので、次はアサーションを作成してみましょう。 コントローラのテストと Redirector アクションヘルパー Redirect アクションヘルパーは、gotoAndExit() メソッドを使うときに exit() ステートメントを発行し、このメソッドのテストを停止させます。 アプリケーションのテスト容易性を考慮して、 リダイレクタではこのメソッドを使わないようにしましょう。 その性質上、リダイレクタアクションヘルパープラグインは リダイレクトしたあと処理を終了します。exit をコールする部分をテストすることはできないので、 Zend_Test_PHPUnit_ControllerTestCase は自動的にリダイレクタでの exit 部分を無効化します。 その結果、テスト時と実際の実行時で挙動が変わってくることがありえます。 リダイレクトが正しく動作することを確実にするには、次のようにします。 _redirect(...); } else if($anotherCondition == true) { $this->_redirector->gotoSimple("foo"); return; } // do some stuff here } } ]]> アプリケーションによっては、これだけでは不十分かもしれません。さらに preDispatch() あるいは postDispatch() といったロジックを実行するかもしれないからです。 現状の Zend Test では、これらをうまく処理することはできません。