[symfony] jobeetをやってみる - day08

Day08
前回の続きです。公式ドキュメントはこちら。
なお、Kiskeさんを始め多くの方のおかげで、Jobeetチュートリアル日本語版がコミットされています。皆さん、お疲れさまです m(_ _)m これで英語の読解に気を取られずにチュートリアルに専念できますね。
また、Doctrineバージョンも作成されています。まだ始めていない方は、好きなORMを選択できますね。
私の方はと言えば、最近、何かと空回り気味ですが、くじけず頑張ります。
今回は自動テストについて。
Tests in symfony
symfonyの自動テストには単体テストと機能テストの2種類があり、今日は単体テストについて、明日は機能テストについて取り上げるよ、とのこと。
Unit Tests
実践的なやり方として、始めは気楽にテストに取り組もう。次のステップとして、新機能用のテストを書こう。すぐにテスト中毒になるよ、とのこと(超訳です)。
The lime Testing Framework
symfonyが提供しているlimeテストフレームワークについて。lime_testオブジェクトのメソッドについて。
Running Unit Tests
慣例的なテストファイル名の付け方について。推奨ディレクトリ構造について。
JobeetTest.phpファイルの作成と実行。
Testing slugify
Jobeet::slugify()メソッドのテストコードを作成。
最後の引数に渡す説明文は、「テストするメソッド名 + メソッドが果たすべき機能」のように書くといいらしい。
test:coverageタスクを実行してみると、
You must install and enable xdebug before using lime coverage.
と悲しいエラーが。sotarokさんの記事を参考にxdebugをインストール。
$ sudo yum --enablerepo=utterramblings install php-devel $ sudo pecl install xdebug
でインストールはおっけー。次に、下記のようにxdebug.iniを作成して
extension=xdebug.so xdebug.collect_params = On xdebug.dump.GET = * xdebug.dump.POST = *
Apacheを再起動させると、見事に次のようなエラーが出たました!!
Xdebug MUST be loaded as a Zend extension in Unknown on line 0
なんでやねん!!Google先生に伺い、最初の一行を次のように修正することで解決しました。
(/path/to/xdebug.soの部分は各自の環境に合わせてください)
zend_extension=/path/to/xdebug.so
と思ったら、Jobeetだけでなく、symfony1.2で作成したWebサイトの画面が真っ白になっているではないですか。。。1.0のものは大丈夫でしたが。Apacheのエラーログを見ても、
child pid xxxxx exit signal Segmentation fault (11)
とあるだけでよく分からん。とりあえず、xdebug.iniはコメントアウトしておきました。。。原因が分かる方がいらっしゃいましたら、ご教授ください。
Adding Tests for new Features
空文字の時のテストケースを作成してから、実装。
Adding Tests because of a Bug
ここでお待ちかね、非ASCII文字の未対応バグについて。
。。。そうきたか。非ASCII文字しか含まない場合は全て「n-a」とな。。。さよなら日本語。
Propel Unit Tests
DB接続を伴うテストについて。
今回は公式ブログコメントは控えておきますが、何カ所かtypoを発見。
まず、test/bootstrap/propel.phpのテストデータファイルのパスが
$loader->loadData(sfConfig::get('sf_test_dir').'/fixtures');
となっていますが、おそらく、
$loader->loadData(sfConfig::get('sf_data_dir').'/fixtures');
だと思います。(私の勘違いでした。Thanks to kitokitokiさん!)
次に、JobeetJobTest.phpのファイルパスが
// test/unit/module/JobeetJobTest.phpとなっていますが、おそらく、
// test/unit/model/JobeetJobTest.phpですね(既にHarroさんが公式ブログでコメントしてました)。
Unit Tests Harness
test:unitタスクの引数を省略して、全単体テストを一気に実行。
See you Tomorrow
limeの感想として、わざわざコンストラクタの第一引数にテスト数を書かなければいけない理由はよく分かりませんでした。
テスト駆動開発の感想としては、中長期的に見れば必ず報われるので、品質を保つためにも取り入れたいなと思いました。ただ、短期的には開発コストが高くなるので、実際の現場では、近視眼的な経営者やPMからは理解を得られない場合もあるのかな、と思ったり。みなさんの現場ではどうですか??
明日はjobモジュールとcategoryモジュール用の機能テストだそうです。では、また明日。
Great site.
@Sesso
Thank you
ひょっとしたら、勘違いされているのではないか、というところを見つけました。
> おそらく、
> $loader->loadData(sfConfig::get(’sf_data_dir’).’/fixtures’);
> だと思います。
とありますが、公式ページ(http://www.symfony-project.org/jobeet/1_2/Propel/en/08)のTest Dataというセクションの最後に
“For now, copy the files from data/fixtures/ to the test/fixtures/ directory.”
とあるので、
$loader->loadData(sfConfig::get(’sf_test_dir’).’/fixtures’);
のままにするのが、チュートリアル作者の意図に沿うのではないでしょうか。
私はまだ未熟者なので、検討違いなコメントかもしれません。その場合は、申し訳ありません。
kitokitokiさん
こんばんは。ご指摘頂きありがとうございます!!
おっしゃる通り、私の勘違いでした。。早速、修正致します!
いやー、ちゃんと読まなきゃダメですね。。
kitokitokiさんも、Jobeet & symfony楽しんでください!
コメントありがとうございました m(_ _)m
Toc さん。
ものすごく素早い対応をありがとうございます。
ここのブログ、日本語で読める数少ないsymfony情報として、大変重宝しています!
それでは、失礼致します!