cakePHPでテストコードを書いてみました

モデルのテスト


!テストで行うこと!
・参照して、意図した値がはいっているか?
・エラーであるべき値を入れて、きちんとエラー処理できているか?
・saveなど登録でafterfind、bforefindがちゃんと動作しているか?


- - - - - - - - - - - - - - - - - - - - - - - - - - -


・テストコードをブレイクで生成すると、testsフォルダに fixture.php が自動的に作られる
$records arrayに自分の好きなデータを入れてテストする
例)
var $records = array(
array(
'id' => 1,
'shop1' => 'Lorem ipsum dolor ',
'shop2' => 'Lorem ipsum dolor ',
'area' => '1',
'states' => '北海道',
'address1' => 'Lorem ipsum dolor sit amet',
'address2' => 'Lorem ipsum dolor sit amet',
'tel' => '000-0000-0000',
'map' => 'Lorem ipsum dolor sit amet'
),

array(
'id' => 2,
'shop1' => 'Lorem ipsum dolor ',
'shop2' => 'Lorem ipsum dolor ',
'area' => '1',
'states' => '北海道',
'address1' => 'Lorem ipsum dolor sit amet',
'address2' => 'Lorem ipsum dolor sit amet',
'tel' => '000-0000-0000',
'map' => 'Lorem ipsum dolor sit amet'
)
);

・コントローラーはモデルを利用しているだけなので、テストはモデルだけでいいみたいです


・本番テーブルを使わなくても、仮のテーブルを自動で生成してくれる
 →testが終わったらドロップテーブルしてくれるので、本番の環境には全く影響がない。

var $fixtures = array('app.shop');
をtest.phpに記述する事で、テストで仮のテーブルが使用されます
なので、登録のテストなどを行っても、本番のテーブルを汚すことなく、テストできます


ルーティングのテスト


routes.phpをいじると、記述する順番などによって、動いたり動かなかったりすることがあります
そういうのを防ぐ、チェックするというのをテストコードでできたりします。

参考サイト:http://www.1x1.jp/blog/2009/05/cakephp_routers_php_unittest.html


admin設定をしている場合には
正引きの場合は
$this->assertIdentical('admin', $params['prefix']);

逆引きの場合は
'admin' => 'admin'

を追加してあげるといいとおもいます




予期せぬコードを入力された場合のエラーチェック


予期せぬコードを入力された場合は下記を記述
$this->cakeError('error404');
ユーザへエラーページが表示され、アプリケーションのこれより後のあらゆる処理が停止されます


もともと、ホームページなどにはヘッダーといわれて、ソースでは見えない情報をやり取りしているそうです
その項目のhttp status codeというものでリクエスト失敗や成功などの判断を行うコード


覚えておいたほうがいいコード

200:OK
301:転送して表示した場合のコード
302:一時的に別のURLになっている場合のコード
401:認証が必要
404:not found
500:htaccessの記述間違い
503:メンテナンス中に表示

firefoxのアドオンの「LIVE HTTP headers」を入れるとヘッダー情報がみれるようになる

ヘッダーにコードを持たせることは、検索エンジンなどに登録されたりとかする上でとても大切!!

http status code
http://www.studyinghttp.net/status_code#Code200

Error Handling
http://book.cakephp.org/ja/view/154/Error-Handling




memo

findメモ
idが1以外のデータを取得
$this->Shop->find('all',array=>('condition'=>array('id <>' => '1')));

データの数取得
$this->Shop->find('count');



今日からtwitterのアプリ作り始めたいと思います
何ができるようなモノにしようかな・・・
単語検索とか、たぶんもうあると思うけど、自分で作ってみるのが大切!!!
って思って作ります。

一週間ぐらいで作れたらいいな・・