最近、RspecやCapybaraでRailsのテストを書くたびに、ちょっとした書き方がわからずググったり、冗長なテストを書くことに結構悩んでいました。ということで、思い切ってRspec再入門として、『Everyday Rails - RSpecによるRailsテスト入門』を読みました!Rails/Rubyはどんどんバージョンアップするので、紙媒体の書籍だと情報が古くなってしまっている場合があります。この書籍は著者や訳者さんが、しっかりとアップデートを続けてくれているので、最新の入門チュートリアルとしてRspecの実践的な使い方を習得できる書籍です。
またこの本を読むにあたってRSpecのドキュメントやWebサイトを読みなおしたので、合わせてRSpec初学者向けのマトメを作りました!
おすすめドキュメント
Rspec/Capybara
スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)
スはスペックのス 【第 2 回】 RSpec on Rails (コントローラとビュー編)
RSpecの説明やテスト駆動開発の入門的記事。
Railsを学習中の初心者がテスト駆動開発(TDD)あるいはビヘイビア駆動開発(BDD)を実践するための基礎的な知識や考え方を説明していきます。
RSpecのshouldはもう古い!新しい記法expectを使おう!
RSpecの今風の書き方についてのバイブル的な記事。10回以上は読んでいますw
改めて学ぶ RSpec
一歩すすんで、 it や describe やテストの実行の仕方などを知った人が実践の中で使っていくために必要なノウハウを中心にまとめてくれています!
Better Spec
Better Specsは開発者達の経験を、体系化したドキュメントです。中級者の人が、さらにRSpecでのテストを書けるようになりたいときにぜひ読んでほしい資料です!
モック・スタブについて
RSpec でテストを作るのに役立つ「モック/スタブ」のシンプルな説明
メソッド同士の依存関係を疎に保つのに役に立つのがモックやスタブといった機能です。少しテストを書くのに慣れてきたら是非読んでみてください。
FactoryGirl
factory_girlの使い方 - Qiita
テストのときのFixtureとして有名なfactory_girlの使い方をサンプルソースとセットで説明をしてくれています。FactoryGirlを使いはじめるときに読んでおくと捗るかも。
Rails - Factory Girl 3.x メモ - Qiita
FactoryGirlの応用的な使い方を中心に説明。初心者むけというよりはFactoryGirlを使っていく中でより、使いこなしたいと思う人にオススメのドキュメント。
Everyday Rails - RSpecによるRailsテスト入門について
『Everyday Rails - RSpecによるRailsテスト入門』を読んでいく中で、特に印象に残った部分を中心にピックアップしていきます。ブログ駆動勉強ですw
Everyday Railsのサンプルソース
everydayrails/rspec_rails_4 - GitHub
この書籍ではできるだけRspecやテストに集中できるようにサンプルソースが用意されています。しかもRails4対応と至れり尽くせりです。素晴らしい!
1
| |
強く印象に残った点
勉強をするときにコピペをするのではなく、自分デコードを書いていくべき
これは最近学習によって得られる知識がかなり変わることを実感しているのですごく共感できます!
TDDで動くコードを書く前にRSpecのexample(itで始まる行)まで書いてテスト設計する
いつもテストが先か、コードが先かで悩んでいました。この理由の一つは動かない状態のテストの設計をどこに書くかでしたが、この本を読んでいく中でこういうふうに先に設計すればTDDの流れの中で開発できるんだと感激ました^^
feature specに比べてコントローラスペックのほうが、少ないコストでテストできる
この利点をうまく活かして効率のいいテストを行うべきというのは目からウロコでした!
絶対に覚えておきたいRSpecを書くときの基本
* Specアウトラインをベースに考える * example(itで始まる行)は原因究明しやすいように結果を1つに絞る * 期待する結果は能動形、具体的に記述すること * 「起きてほしいこと、起きてほしくないこと」の両方のテストを書くこと * 境界値テストをすること * スペックの可読性を維持するためのリファクタリング
shared_examples
RSpec の Shared Examples(shared_examples_for)機能
こちらのサイトのサンプルソースが非常にわかりやすいです。一言で言うと、いくつかのテストをグループ化して、メソッドのように何度も呼び出せるようにしてくれます。
RSpec の Shared Examples という機能を勉強しました。この機能を用いると共通のテストコードを、文字通り Shared Examples(共有用の見本コード)で共有できて、テスト用コードをぐっと短く読みやすくできます。
テストで特定の時間を指定する方法
travisjeffery/timecop - GitHub
特定の曜日や日にちに依存する処理がある場合に、そのテストをすることができる。また、時間を止めることができるのでタイムスタンプが正しく動いているかのテストなどができる。
FactoryGirlの使い方忘備録
1 2 3 4 5 6 7 8 9 | |
Rspecの便利マッチャー
1 2 3 4 5 | |
テストにおすすめなgem
もともと自分で使っていたものや、書籍の中で便利だなと思ったものを幾つか書いておきます!
pry/pry-exception_explorer - GitHub
例外が発生した時にpryを呼び出してくれる。開発中やテスト中におすすめ。
pry/pry-stack_explorer - GitHub
pry中にスタックを確認できる。
stympy/faker - GitHub
名前やアドレス、電話番号などのフェークデータを自動生成してくれるデータ。
VCRを使うとRSpecのwebmockの作成が超絶楽になった!
VCRとはテストで使う『HTTP通信』を1回目に記録しておいて、2回目以降のテストでは1回目のデータを流用することでHTTP通信をせずに高速にテストを行うことができるGemです。変化の