CakePHP 1.3 でコントローラをテストするには testAction メソッドが便利。
- テストケースの作成 :: コントローラのテスト :: テスト(Testing) :: CakePHPによる作業の定石 :: マニュアル :: 1.3コレクション
- testAction メソッド :: コントローラのテスト :: テスト(Testing) :: CakePHPによる作業の定石 :: マニュアル :: 1.3コレクション
けれど、コントローラーの中で redirect メソッドが使われていると、テストケースが途中で終了してしまうため、テストができない(redirect メソッドの中で exit() が呼ばれている)。
様々な解決策が模索されてきたのだけれど、一番お手軽だったのが Extended Test Case Plugin を使う方法。Mock Object を使っている。どう動作しているかは Testing controllers the (slightly less) hard way » 42Pixels で紹介されている。
使い方はREADMEを読めばわかるが、注意点をいくつか。
- cake bake controller してできる class Test<コントローラ名>には var redirectUrl; を追加する。これで、Testing CakePHP Controllers the hard way | Mark Story に書いてある方法でリダイレクトが正しく実施されたかのテストができるようになる。
- class CakeTestCase を class ExtendedTestCaseに変更する。
- class ExtendedTestCase の startTest() メソッドの中で、$this->testController にテスト対象のコントローラーを渡す。
- 別のコントローラーを使ったテストの際は、testActionのURLを変更するだけでは足りない。testActionの前にtestControllerにテストするコントローラを代入しておくこと。