酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Rspec/Capybara/Turnipの入門記事を全力でまとめてみた

さっき、『 The Rspec Book』を読み終えました。厚めの本ですが、RspecやCucumber、Webrat、Seleniumなどを活用するためのノウハウ満載で大満足でした! ということで、この本で読んだ内容を忘れないようにするためと、その過程でRspec/Capybaraなどのネット資料をあつめたので、まとめるためにこの記事を書きます。もし、間違いを発見した場合や他にもいいリソースがあれば、是非メッセージを願いします!

(08/30 20:15) 補足:Cucumber(Turnip) + serverspecを追加しました!
(08/30 22:45) 補足: The RSpec BookのRailsコードについてを追加しました!

Included file ‘custom/google_ads_yoko_naga.html’ not found in _includes directory

テスト駆動開発(TDD)と振る舞い駆動開発(BDD)

テスト駆動開発(TDD)とは、コードを書く際に最初にテストを書き、次にテストが通る最低限のコードを書き、その後にリファクタリングしていく開発手法です。一方で振る舞い駆動開発(BDD)はTDDの発展形で、『外から見たソフトの振る舞いを自然言語で記述してテストを書く』というものです。BDDのメリットは、『振る舞い』と『実装』を分けて考えるようになるという点です。RubyではRspecが有名で、minitestも今後の進化が期待されています。

上のスライドは『JUnit実践入門』の著者の渡辺さんのスライド『テスト駆動開発のはじめ方』です。テスト駆動に取り組む上での考え方や、設計のプロセスについてわかりやすく説明して頂けています。

受け入れテスト

受け入れテストとは、顧客(ユーザー)視点でのテストのことです。受け入れテストでは、「End-to-Endのテスト」を行うべきとされています。このEnd-to-Endのテストの説明は、『第8回 テスト駆動開発の「サイクル」――まず受け入れテストで土台を作る』に次のような説明があります。

End-to-Endのテストとは,リクエストがクライアント,たとえばブラウザから始まって,サーバ内で処理され,制御が再度クライアントのほうに返ってくるという構成のときに,リクエストを投げてレスポンスが返ってくるまでの処理をブラックボックスとして捉え,大きく機能の入り口から出口までの範囲のブラックボックステストを行うことを指します。

ちなみにRubyの受け入れテストツールとしては、cucumberが有名で、最近ではturnipが注目を集め始めています。また、Webブラウザによるテストを手助けしてくれるCapybaraも広義の受け入れテストツールの一つです。

このスライドは2012年9月に発売された『実践テスト駆動開発』の翻訳者、和智さんがデベロッパーズサミットで発表されたスライドです。スライドの内容は、ソフトウエア開発の中でテスト駆動開発を行うために、『受け入れテスト』を含めたプロセスを実施することについて述べられています。より詳細な手法については『実践テスト駆動開発』の中で述べられていると思うので、できるだけ早く読んでみます!

Rspecについて

「RSpec をもっと理解したかったので、まとめを作りました」に感動してRuby 1.9.3でやってみた!

Rspecの導入分については、拙著『「RSpec をもっと理解したかったので、まとめを作りました」に感動してRuby 1.9.3でやってみた!』が基礎を理解するのにはオススメです。

スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)

そして、Rspecのより実践的な部分を理解するのには、『スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)』がオススメっす!

RSpec + Capybaraを使ったテストについて

RSpec/Capybara入門

RSpec + Capybraraを使ったテストについての記事では、2013年8月から連載中の『RSpec/Capybara入門』や『RSpecとCapybaraでJavaScript/Ajaxをテストする』がオススメです。セミナーや書籍を出版されているoiaxさんだけあって、説明がとってもわかりやすいです!

Rails4 + Capybara + PhantomJS (poltergeist) なテスト環境

さらにRSpec + Capybaraでのテストの際にseleniumではなく、ヘッドレスドライバのPhantomJSを使う方法についてsasata299’s blogさんが『Rails4 + Capybara + PhantomJS (poltergeist) なテスト環境』でまとめられています。オススメです!

Cucumberの後継、『Turnip』について

エンドツーエンドテストの自動化は Cucumber から Turnip への実装者側と利用者側の接点

Cucumberはその思想こそ素晴らしいですが、バージョンによる進化のスピードが速いことや、記述に必要なノウハウやスキルの高さが要求されるため、なかなか普及していません。それを踏まえて、RspecやCapybaraと互換のあるTurnipというツールが注目を集めています。このTurnipについての入門記事『エンドツーエンドテストの自動化は Cucumber から Turnip へ』がオススメです!

Included file ‘custom/google_ads_yoko_naga.html’ not found in _includes directory

補足:BDDの理解を深めよう

BDDについて自分なりにまとめてみたのスクリーンショット

ブログ UKSTUDIOさんの記事『BDDについて自分なりにまとめてみた』には、BDDという言葉が表している2つの意味について説明をしてくれています。僕も少し疑問に感じていた部分を説明してくれる内容だったので、もし腑に落ちないと感じている方は是非ご覧になってください。

補足:Cucumber(Turnip) + serverspec

Ruby - cucumberのstepsでserverspecをつかう

Cucumber(Turnip)を使って構築済みサーバの確認のためにserverspecを使っているかたのQiitaの記事『Ruby - cucumberのstepsでserverspecをつかう』を見つけたので残しておきます。この形式のメリットは、テスト結果をチームでシェアしやすい点があるようです。

補足: The RSpec BookのRailsコードについて

「The RSpec Book」の第19章(Railsのテスト)以降を試すには

The RSpec BookのRailsインストールの部分ですが、Railsのバージョン3.0.0の時点でのコードを基準としているため、08/30時点ではコードを書いても動かせません。 emadurandalさんがQiitaに『「The RSpec Book」の第19章(Railsのテスト)以降を試すには』で対処方法を書いていますので是非ご参照ください!

Special Thanks

emadurandalさんからThe RSpec BookのRailsコードについてコメントを頂きました。ありがとうございます!

Turnip について (1) / まずは動かす - Thanks Driven Life

Turnipを使ってtappのテストを書いた話

変更来歴

(08/30 20:15) 補足:Cucumber(Turnip) + serverspecを追加
(08/30 22:45) 補足: The RSpec BookのRailsコードについてを追加

おすすめの書籍