CakePHP1.3のtestActionでモック、スタブを使う。

前回のエントリーでtestActionが使えないと言っていたのですが、案の定僕のやり方が間違っていました。
testActionでモック、スタブが使えるようになったので一応紹介しておきます。

やりたいことは前回と同じで特定のコンポーネントをスタブにします。

コード

<?php
/* Posts Test cases generated on: 2010-07-13 20:07:58 : 1279019398*/
App::import('Controller', 'Posts');

class TestPostsController extends PostsController {
  
	function beforeFilter(){
		#ここでコンポーネントをスタブ
		Stub::generate('BookmarkComponent');
		$this->Bookmark = new MockBookmarkComponent();
		$this->Bookmark->setReturnValue('num', 42);
		 parent::beforeFilter();
	}
  
	function redirect($url, $status = null, $exit = true) {
		$this->redirectUrl = $url;
	}
}

class PostsControllerTestCase extends CakeTestCase {
	var $fixtures = array('app.post');
  
	function startTest() {
		$this->Posts =& new TestPostsController();
		$this->Posts->constructClasses();
	}

	function endTest() {
		unset($this->Posts);
		ClassRegistry::flush();
	}

	function testIndex() {
		#testAction先を/test_postsとすることで上で定義したコントローラが呼べる
		$result = $this->testAction('/test_posts/index',array('return'=>'view'));
		$this->assertPattern("/42/",$result,"ブックマーク数は42である");
	}
}
?>