読者です 読者をやめる 読者になる 読者になる

testActionを使う時はautoRenderがfalseだとダメ

CakePHP2.0 php

CakePHPでBake使ってControllerのテストを作るとき、一緒にテストしたいControllerクラスのMockみたいのができるのだけど、
そのクラスはredirectされないようにoverrideされていたり、renderされないように

public $autoRender = false;

となってたりする。



で、今日テスト書いてて

        $actual = $this->testAction('/test_hogehoge/index', array(
            'method' => 'get',
            'return' => 'view',
        ));

みたいな感じでtestActionの結果を受け取ってviewの中身を見ようと思ったら空で、
「あれれれれー」ってずっとハマってしまった。



理由はDispatcherの113行目の条件分岐で、

		if ($render && $controller->autoRender) {
			$response = $controller->render();
		} elseif ($response->body() === null) {
			$response->body($result);
		}

の部分。



autoRenderがfalseになっているとrenderが呼ばれず、renderが呼ばれないからviewも作られないと。
当たり前と言えば当たり前なのだけど、頭のどこかで「Mockだからrender使わずにview作っているんだろう」と思い込んでたのがハマったポイントでした。
testAction使うときはテスト用のcontoller使わずに'/hogehoge/index'でやれば良いと。