RSpec: マッチャー定義でchainを使う
定義
RSpec::Matchers.define :be_bigger_than do |first| match do |actual| (actual > first) && (actual < @second) end chain :but_smaller_than do |second| @second = second end end
実行
RSpec.describe 5 do it { is_expected.to be_bigger_than(4).but_smaller_than(6) } end
chainに定義したものから実行される。
いつ使うか
上の例を、煩雑に書くとこんな感じ
定義
RSpec::Matchers.define :be_bigger_than do |first| match do |actual| (actual > first) end end RSpec::Matchers.define :be_smaller_than do |second| match do |actual| (actual < second) end end
実行
RSpec.describe 5 do it { is_expected.to be_bigger_than(4) it { is_expected.to be_smaller_than(6)} end
つまり、同じsubjectに対し、2つのテストを実行するときは、 chainを利用して記述を簡略化することができることがあるんじゃないかな。