&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」になるらしいけど、分かりやすいと思えないので無視。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS