&tag(RSpec3); *目次 [#zb8b3d40] #contents *関連ページ [#ed214407] *参考情報 [#rc31256c] -[[RSpecの入門とその一歩先へ 〜RSpec 3バージョン〜 - Qiita:http://qiita.com/jnchito/items/624f6d5023c279046a1c]] *RSpec入門の写経(細部省略) [#eb097ee2] **セットアップ [#b02e8eaa] -プロジェクトの作成 #pre{{ mkdir rspec3-for-beginners cd rspec3-for-beginners rbenv local 2.1.2 touch Gemfile }} -Gemfileの編集 #pre{{ source 'https://rubygems.org' gem 'rspec', '3.0.0' }} -bundle install実行 bundle install --path vendor/bundle **テスト対象を作成 [#x67940df] -message_filter.rbを作成する #pre{{ class MessageFilter end }} **specの作成 [#yd0ad94d] -message_filter_spec.rb を作成 #pre{{ require_relative 'message_filter' describe MessageFilter do end }} **実行 [#pba31e6f] -bundleで実行 bundle exec rspec message_filter_spec.rb ***テストの進化 [#v9964531] -テスト対象を修正 #pre{{ class MessageFilter def initialize(word) @word = word end def detect?(text) text.include?(@word) end end }} -specの修正。 #pre{{ require_relative 'message_filter' describe MessageFilter do it 'detects message with NG word' do filter = MessageFilter.new('foo') expect(filter.detect?('hello from foo')).to eq true end end }} *rspecの書き方の個人的方針 [#oaba092b] -[[Better Specs { rspec guidelines with ruby }:http://betterspecs.org/jp/]]を踏まえたほうが良いかも。 -基本的に以下のようにする。 #pre{{ describe テス対象クラス do it 'コメント' do expect().to eq true end end }} -itのあとのコメントはBetter Specsにあるようにメソッド名にする。メソッドごとじゃない場合日本語で適当に。英文で意味が通らなくても気にしない #pre{{ describe '.build' do describe '#admin?' do }} -itの中に複数書くのはご法度らしいけど、分けるのがめんどくさかったら複数書く。 -be_predicateマッチャーは使わない。 -「expect(hoge.fuga?).to eq true は expect(hoge).to be_fuga」になるらしいけど、分かりやすいと思えないので無視。