CakeTestCaseでtestActionを実行すると別のページにリダイレクトされちゃう問題 - いとうまさしのカチャカチャTODAY
redirectを含むコントローラーをtestActionでテストしようとしたら、
テスト結果が出ずに通常のビューにリダイレクトしてしまった。
これを解決するための記述だそうです。
(1) app/webroot/test.php の 98行目付近に追記
require_once CAKE_TESTS_LIB . 'test_manager.php';
の後ろ辺りに
Configure::write('CAKE_ENV', 'test');
と定義。
(2) app/app_controller.php に下記を追記。
<?php class AppController extends Controller { // 処理 function redirect($url, $status = null, $exit = true) { // 「テスト実行時に本当にリダイレクトしちゃう」問題への対処 // テスト環境のときは、リダイレクトメソッドを実行せずに // ビューを表示させる if(Configure::read('CAKE_ENV') == 'test') { $this->set('function', 'redirect'); $this->set('url', $url); $this->set('status', $status); $this->set('exit', $exit); $this->render(null, null, TESTS . DS . 'views' . DS . 'redirect.ctp'); } else { // それ以外の通常環境ではいつも通りリダイレクトする parent::redirect($url, $status, $exit); } }
(3) app/tests/views/redirect.ctp というファイルを下記の内容で作成。
<h2>redirect</h2> <div>session flash : <?php $session->flash(); ?> <?php if (isset($url) &&is_array($url)) : ?> <?php foreach ($url as $k => $v) : ?> <div>url : <?php echo '[', $k, '] : ', $v; ?></div> <?php endforeach; ?> <?php else: ?> <div>url : <?php echo $url ? $url : ''; ?></div> <?php endif; ?> <div>status : <?php echo $status ? $status : ''; ?></div> <div>exit : <?php echo $exit ? $exit : ''; ?></div>
を記述することで、テストだけredirectを(3)のビューのデバッグに
切り替えることが出来る。