てきとうなさいと べぇたばん

CakePHPでテストコードをつける

テストを書こう

テストコードを書こう。恥ずかしながら、あまり書いていなかったので。

参考情報

http://book.cakephp.org/2.0/ja/appendices/phpunit-migration-hints.html

インストール

$ sudo pear install phpunit.de/PHPUnit

ハマった箇所

  • 型に厳格になってた。
  • var_dumpやdebug()を使いたいときは、&debug=1をURLにくっつける
  • Helperのテストで、Helperからモデルを呼び出している時

型に厳格になっていた

array(
    'id' => 1
);

データベースからの値をテストしている最中、これをassertEqualsで比較すると、型が数値型と文字列型で違うとエラーが出た。比較側を文字列にして修正。

var_dumpやdebug()を使いたいときは、&debug=1をURLにくっつける

var_dump($result);

テストが通らず、値をデバッグしようと思ったのに、var_dumpで表示されない。この場合は、URLの後ろに&debug=1をつければいい。

Helperのテストで、Helperからモデルを呼び出している時

// Hogeというモデルを呼び出す
$model = ClassRegistry::init('Hoge');

モデルをヘルパーから呼び出すというケースで、少々の修正があった。

App::uses('Hoge', 'Model');

テストの冒頭にこれを記述する。

public $fixtures = array('app.hoge');

また、フィクスチャを使っている時には、モデルと同じく$fixturesに入れればいいらしい。1.3系の時と変わっていない。

テストケースでヘルパーを呼び出すときにはちょっと変更が必要。
function startTest() {
    $Controller = new Controller();
    $View = new View($Controller());
    $this->HogeHelper = new HogeHelper($View);
}

HogeHelperを呼び出す際には、こんなかんじになると思う。

ファイルパスの変更

.
├── Behavior
├── Compornent
├── Controller
├── Helper
└── Model

1.3系では小文字複数形だったのが、1文字目大文字単数形になっている。ただし、別に1.3系でもテストは出来るようだが、bakeではこの形になるので揃えたほうがいいとは思う。

bakeのしかた

$ ./Console/cake bake

あとはウィザードに従って作成。フィクスチャも作れた。

テストコードを書かないと

CakePHP2系ではテストが書きやすくなっていると感じた。いろいろ躓いたけど、ドキュメントはしっかりしているので運用できると思う。