Symfonyに挑戦14「Jobeet 8日目」
単体テストを実行
Mac:~ kaneda$ php test/unit/JobeetTest.php もしくは、 Mac:~ kaneda$ php symfony test:unit Jobeet
「Looks like everything went fine. 」と表示された。
slugifyをテストする
5日目に作ったslugify()メソッドをテストする。
- jobeet/test/unit/JobeetTest.phpを変更
【覚書】
<?php // テスト用のファイルを読み込み require_once dirname(__FILE__).'/../bootstrap/unit.php'; // limeテストツールを準備 $t = new lime_test(6, new lime_output_color()); // jobeetクラス(jobeet/lib/Jobeet.class.php)のslugifyメソッドにテスト用の引数を渡す。 // is($v1, $v2)で、$v1とv2の値が等しかったらテスト結果がOKになる $t->is(Jobeet::slugify('Sensio'), 'sensio'); // 三つ目の引数にテストの説明文を書けばわかりやすい $t->is(Jobeet::slugify('Sensio'), 'sensio', 'テストの説明');
新しい機能のためにテストを追加する
- jobeet/test/unit/JobeetTest.phpにテストを一個追加して、4行目のlime_testの第一引数を7に変更
- jobeet/lib/Jobeet.class.phpのslugify()メソッドを変更
【覚書】
- テストを先に書いてから機能を実装していく手法がある。テスト駆動開発(TDD)というらしい
バグが原因でテストを追加する
- jobeet/test/unit/JobeetTest.phpにテストを一個追加して、4行目のlime_testの第一引数を8に変更
- jobeet/lib/Jobeet.class.phpのslugify()メソッドを変更
【覚書】
- バグを見つけたらまずテスト!
- Symfonyを作った人はフランス人
Propel単体テスト
Propelモデルのテストにはデータベースの接続が必要なので、テスト用のデータベースを別途作成する。
※jobeet_testデータベースはphpMyAdminで作成した。
Mac:~ kaneda$ php symfony configure:database --env=test "mysql:host=localhost;dbname=jobeet_test" DBアカウント DBパスワード Mac:~ kaneda$ php symfony propel:insert-sql --env=test
- jobeet/data/fixturesディレクトリをjobeet/testに丸々コピー(jobeet/test/fixturesフォルダが出来る)
- jobeet/bootstrap/Propel.phpファイルを作りコードをコピペ
- jobeet/test/unit/model/JobeetJobTest.phpファイルを作りコードをコピペ
※JobeetJobTest.phpファイルの中身↓
<?php include(dirname(__FILE__).'/../../bootstrap/Propel.php'); $t = new lime_test(3, new lime_output_color()); $t->comment('->getCompanySlug()'); $job = JobeetJobPeer::doSelectOne(new Criteria()); $t->is($job->getCompanySlug(), Jobeet::slugify($job->getCompany()), '->getCompanySlug() return the slug for the company'); $t->comment('->save()'); $job = create_job(); $job->save(); $expiresAt = date('Y-m-d', time() + 86400 * sfConfig::get('app_active_days')); $t->is($job->getExpiresAt('Y-m-d'), $expiresAt, '->save() updates expires_at if not set'); $job = create_job(array('expires_at' => '2008-08-08')); $job->save(); $t->is($job->getExpiresAt('Y-m-d'), '2008-08-08', '->save() does not update expires_at if set'); function create_job($defaults = array()) { static $category = null; if (is_null($category)) { $category = JobeetCategoryPeer::doSelectOne(new Criteria()); } $job = new JobeetJob(); $job->fromArray(array_merge(array( 'category_id' => $category->getId(), 'company' => 'Sensio Labs', 'position' => 'Senior Tester', 'location' => 'Paris, France', 'description' => 'Testing is fun', 'how_to_apply' => 'Send e-Mail', 'email' => 'job@example.com', 'token' => rand(1111, 9999), 'is_activated' => true, ), $defaults), BasePeer::TYPE_FIELDNAME); return $job; }
そしてテストを実行
Mac:~ kaneda$ php symfony test:unit JobeetJob 全てのテストをまとめて実行↓ Mac:~ kaneda$ php symfony test:unit