Rails勉強会@東京第42回に行ってきました。
RSpec
前半はまだあまり慣れていないRSpecののセッションに参加しました!
概要
Rubyで、Specification(仕様)を先に書く開発手法だからRSpecという名前なのかな。
RSpecを一言でいえば「printlnの代わり」。
動作確認するときにprintlnの代わりにRSpec使うと便利という意味。
Rails開発では、controllerのロジックは薄く、modelに機能を集約するのがよいので、RSpecはmodelだけに使うのがよいとのこと。
コード
後半は id:moro さんに、Skip Wikiのspecファイルのnote_spec.rbのソースコードを見せて頂きながら、説明して頂きました。
RSpecは自明な部分とか全部をテストするときりがないので、キモになる部分をテストする。
id:moro もろはしさんのキモは「現在のmodelが保存されているかどうか」ということなので、しばしばmodelの保存状態を確認するコードがある。(reloadの行)
before do @page = @note.pages.add(@initialize_attrs.merge(:format_type => "html"), @user) end it "create new page" do @page.save! @note.reload.should have(1).pages end
またspecのコードは、以下のようにbefore条件が共通なものをまとめて書くとよい。
describe Xxx do before do ... end describe "XXXの場合" do before do ... end describe "XXXの場合" do before do ... end describe "XXXの場合" do ... end end describe "XXXの場合" do ... end end end
specが書けたら以下のように実行
$ rake spec
学習
- るびま「スはスペックのス」 http://jp.rubyist.net/magazine/?0021-Rspec しかし、RSpec不要説により、タイトルは「キはキューカンバーのキ」にさりげなく変わるという噂が(笑)
- なんだっけ…
その他Tips
- Custom Matchersを積極的に使おう。プロジェクトにより、マッチの概念レイヤーを一つあげ、作っておくだけで、同じコードが復習個所に散らばらず効率良くテストできる。(下記参考URL参照)
- subject: レシーバーの設定。id:ayumuaizawaさんのこちらの説明が分かりやすかった。
- content: describe の alias。ケースにより使い分けようとのこと。面倒なのでdescribe統一でいいや。
- バッチのspecテストでは、インプット、アウトプットデータとやりとりするところが大変だけどfakefsというgithubのモジュールを利用すると便利とのこと。
参考
- Skip Wiki ソース: http://github.com/openskip/skip-wiki/tree/cd3fbf8aa35bf18e6ee7e537afb23181f81bf701
- Custom Mactcherの説明(id:moro さんのプレゼンファイル): http://d.hatena.ne.jp/moro/20090707
- るびま「スはスペックのス」 http://jp.rubyist.net/magazine/?0021-Rspec
Cucumber
概要
Cucumber(発音:キューカンバー、意味:キュウリ)。
なんでキュウリなのだろうか?
Cucumberを一言でいうと、「受け入れテストに最適」。
「人生」というご意見もありましたが、気持ちは伝わりましたが、そういうのはナシでお願いします(笑)
結論からいうと、開発にはCucumberは必須だけど、RSpecは必須じゃない!
Cucumberのテストが通っていれば、お客さんにはOK。別にモデルの名前やパスが違ってもお客さんには関係ないからね。
ホストをさせて頂いた。
以下の手順で進めさせてもらった。
- 参加者にCucumberの認識度を聞き、参加者のレベルを把握。→進めやすい
- Cucumberという言葉の定義、意味を共有。→これをやっておくと参加者の方が議論しやすい。
- 参加者全員に今日、Cucumberについて聞きたいことを聞く→期待値の調整。参加者の期待に添う内容で進めるため。
- 聞きたい内容について議論
- 参加者全員に今日の満足度を確認→同情はいらないですよっ(笑)
Topics
- 何ができるのか?
- 何がうれしいのか?
- どういうstepがあるのか?→付属のstepよりレイヤーが高い独自step作ろう。EMailSkip(?)は便利とのこと。よいサンプルがあればいいのですが、Skip Wikiのソースもレイヤーは高くないので、各自で頑張ろう。
- 導入ノウハウ→Nokogiri(Webスクレーピング)、ウェブラット(?)モジュールは必須。
- What?→「人生」(笑)
- Contorollerに使ってもOK?→OK。簡単にかけるよ。
- Cucumberはモバイルで使える?(携帯固有の端末IDとかあるけど)→大丈夫。Mechanizeも便利だよ。
- CucumberとRSpecとの使い分けは?→RSpecはmodel用。Cucumberはそれ以外。でもRSpecは必須じゃないよ。