maeshimaの日記

メモ書きです

これまでのrspec本勉強の復習

これまでメインアカウントのブログでrspecについて書いてきたことを復習して気になったところを簡単にまとめてみた。

?を末尾に持つメソッドの書き換え

receiver.hoge?.should == true は下記のようにも書ける

receiver.should be_hoge
receiver.should be_a_hoge
receiver.should be_an_hoge

receiver.has_key?.should == true は下記のように書ける

receiver.should have_key

個数を調べる

# home_team.players_on(field).length.should == 9 の書き換え
home_team.should have(9).players_on(field)
# collection.length.should == 37 の書き換え
collection.should have(37).items
# dozen_bagles.length.should be <= 12 の書き換え
dozen_bagels.should have_at_least(12).bagels

レシーバの省略

subjectメソッドなどでレシーバを省略できる

describe Person do
  subject { Person.new(:birthdate => 19.years.ago) }
  it { should be_eligible_to_vote }
end
describe RSpecUser do
  # RSpecUser.new の結果がレシーバ
  it { should be_happy }
end

メソッドの実行前/実行後での変化をチェックする

lambda {
  User.create!(:role => "admin")
}.should change{ User.admins.count }.by(1)

lambda {
  User.create!(:role => "admin")
}.should change{ User.admins.count }.to(1)

lambda {
  User.create!(:role => "admin")
}.should change{ User.admins.count }.from(0).to(1)