酒と泪とRubyとRailsと

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

RSpec初心者向けの資料まとめ[Ruby][Everyday Rails書評]

最近、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の説明やテスト駆動開発の入門的記事。

RSpec/Capybara入門

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
git clone https://github.com/everydayrails/rspec_rails_4.git

強く印象に残った点

勉強をするときにコピペをするのではなく、自分デコードを書いていくべき
これは最近学習によって得られる知識がかなり変わることを実感しているのですごく共感できます!

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
# ハッシュ形式のデータを生成する
FactoryGirl.attributes_for(:user)

# ローカルのファイルを指定する方法
FactoryGirl.define do
  factory :user do
    avatar { File.new("#{Rails.root}/spec/factories/avatar.png") }
  end
end

Rspecの便利マッチャー

1
2
3
4
5
# 正規表現でのチェック
expect("a string").not_to match /a regex/

# 配列のチェック
expect([1, 2, 3]).to match_array [2, 1, 3]

テストにおすすめな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です。変化の

ハッカソンハウス始めました!

ハッカソンハウス
2014年2月8日からエンジニア・クリエイターのためのスペース「Hackathon House」始めました!エンジニアがプロダクトづくりに集中出来る環境を作るために『Camp Fire』のご協力よろしくお願いします!

なぜ始めたのか?

僕はアメリカの有名なインキュベーション・オフィスを少しだけ訪問させて頂いたことがあります。あそこはプロダクトの可能性を目一杯引き出してくれる夢のような空間でした。僕はあんな場所を日本にも作りたいとずっと想い続けてきました。この企画を一緒にやっているくりしーさんは、『サウス・バイ・サウスウエスト』を通して、「あのワクワクする空間、熱気溢れるカオスな空間を日本でも創りたい。」というビジョンで一緒にやっています!

どんな場所を作りたいのか?

僕が目指しているのは、日本を代表するようなプロダクトが芽吹く場所。そんなプロジェクトをやりたい本気な仲間と集まれる場所。そんな仲間を見つけられる「ルイーダの酒場」のような場所です。

また、プロダクト開発のために「仲間と一緒に」どこよりもリラックス・集中できる空間をコンセプトにHackathon Houseを育てていきたいです!



押さえておきたい書籍

いかがだったでしょうか?
もし説明がわかりにくかったり、間違っている場所があればぜひ一言!

Comments