2011年03月07日

コンポーネントのテストケース

お願いします♪いいねとかつぶやいたりして下さい
 
http://www.hideblog.net/nikkis/show/163/

で、ビヘイビアのテストケースが理解できた。
次はコンポーネントのテストケース。

○モデルを使わない場合
http://1000g.5qk.jp/2010/07/21/%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%81%AE%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88/

モデルを使わない場合は上記が非常にわかりやすい。

で、今回のテーマ。

Signupプラグイン、Signupコンポーネントに
ユーザーの新規登録機能をつけたい。よって、DBに正常に登録できるかもテストする必要がある。
そこでコンポーネントからテストコントローラー、それに関連したモデルを使いたい。



公式マニュアルのコンポーネントのテストケースは非常にわけわかめ。
で、探して探して探しまくったけど、全然やり方載ってない。

debug.kitのテストケースからソースを学んだ。

○前回同様に fixuture を用意
http://www.hideblog.net/nikkis/show/163/

○/app/plugins/controllers/components/signup.php
<?php

class SignupComponent extends Object {
	
	var $controller;
	
	public function startup(&$controller){
		$this->controller = $controller; 
		
	}
	
	/*
		そのモデルのビヘイビアが true を返せばOK
	*/
    function getName() {
		pr($this->controller->User->find('all'));
        return "りんご";
    }
}
?>


○/app/plugins/signup/tests/cases/components/signup.test.php
<?
App::import("Component", "signup.Signup");

//ダミーモデル(元)
class UserTestModel extends CakeTestModel
{
}

//ダミーモデル ダミーモデル(元)を継承
class User extends UserTestModel
{
	var $actsAs = array('signup.Signup');
}

//ダミーコントローラー
//リダイレクトとかあるとテストケースんときにバグるので
//ここで各メソッドをオーバーライドしておく。
class UserController extends Controller {
    var $autoRender = false;
 
    function flash($message, $url, $pause = 1, $layout = 'flash') {
        $this->flashMessage = $message;
        $this->flashUrl = $url;
    }
	
    function redirect($url, $status = null, $exit = true) {
        $this->redirectUrl = $url;
    }
 
    function render($action = null, $layout = null, $file = null) {
        $this->renderedAction = $action;
    }
 
    function _stop($status = 0) {
        $this->stopped = $status;
    }
}

class SignupTestCase extends CakeTestCase {
	
	var $fixtures = array('plugin.signup.user');
	var $controller;
	
	function startTest($method) {
		
		//componentを読み出す
		$this->SignupComponentTest =& new SignupComponent();
		
		//コントローラーをセット
		$this->controller = new UserController(); 
				
		//コントローラーに使うモデルをセット
		$this->controller->User = new User(); 
		$this->SignupComponentTest->startup($this->controller);
		
		
		//ちなみにdebug.kitには以下のような設定もありました
		/*; 
		$this->controller->params = Router::parse('/');
		$this->controller->params['url']['url'] = '/';	
		$this->controller->constructClasses();
		$this->_server = $_SERVER;
		$this->_paths = array();
		$this->_paths['plugins'] = App::path('plugins');
		$this->_paths['views'] = App::path('views');
		$this->_paths['vendors'] = App::path('vendors');
		$this->_paths['controllers'] = App::path('controllers');
		*/
		echo '<h3>Starting method '.$method.'</h3>';
	}
	
	function endTest() {
		unset($this->controller);
		ClassRegistry::flush();
		echo '<hr/>';
	}
	
	function testGetName()
	{
		$res = $this->SignupComponentTest->getName();
		$this->assertTrue($res);
	}

}

?>


こんな感じ。
大切なのは

ダミーモデルの定義
ダミーコントローラーの定義
でもって、スタートアップの中で読み出しみたいな?



テストケースを勉強するだけで、早2日。。。

セッションがうまく動かないのでそういう場合は

App::import('Component', 'Session');
$controller->Session =& new SessionComponent();



とやればいい。

関連するタグ: PHP cakephp
あなたにとって有用な記事でしたか?是非ブックマークしておくことをおすすめします。
 




ライブラリを配布しちゃったり
webデザイン
Fireworks
HTMLコーディング
CSS
Dreamweaver
携帯サイト
webプログラム
PHP
正規表現
cakephp
MYSQL
javascript
webマーケティング
adwords
analytics
windows7
ショートカットキー
おすすめ情報
サイト
facebook
ライブラリ
配布
アプリ
iphone
ipad
サーバー
さくらサーバー
全ての記事を読む




トップ - 最新の記事一覧 - お問い合わせ