RSpec3で実装されたall Matcherが地味に便利です。
Ruby - 今日から使える!RSpec 3で追加された8つの新機能 - Qiita
it 'すべての数値が奇数であること' do # RSpec 3 expect([1, 3, 5]).to all( be_odd ) end
all
Matcherがあるんだからany
Matcher(コレクションのどれか1つがマッチしてたらOK)もあるんだろうと思ったらなくて、作ろうとしたら既に include
Matcherで実装されていました。*1
普通にやろうとしたらこうなる
it "文字列のいずれかがキュアで始まること" do yes_precure_5 = %w( キュアドリーム キュアルージュ キュアレモネード キュアミント キュアアクア ミルキィローズ ) expect(yes_precure_5.any?{ |name| name =~ /^キュア/ }).to be true end
expectの中にブロックが入るので若干見づらい
include Matcherに渡した引数はactualの各要素に適用される
it "文字列のいずれかがキュアで始まること" do yes_precure_5_gogo = %w( キュアドリーム キュアルージュ キュアレモネード キュアミント キュアアクア ミルキィローズ ) expect(yes_precure_5_gogo).to include /^キュア/ end
includeには別のMatcherを渡してもOK
it "文字列のいずれかがキュアで始まること" do yes_precure_5_gogo = %w( キュアドリーム キュアルージュ キュアレモネード キュアミント キュアアクア ミルキィローズ ) expect(yes_precure_5_gogo).to include(start_with("キュア")) end
括弧を削っても大丈夫
it "文字列のいずれかがキュアで始まること" do yes_precure_5_gogo = %w( キュアドリーム キュアルージュ キュアレモネード キュアミント キュアアクア ミルキィローズ ) expect(yes_precure_5_gogo).to include start_with "キュア" end
他のMatcherを渡せるのでCustom Matcherとの相性がよさそう!
Yes!プリキュア5GoGo! 全16巻セット [マーケットプレイス DVDセット]
- 発売日: 2013/09/01
- メディア: DVD
- この商品を含むブログを見る
*1:サンプルコードのどこにも載ってないので全然気づかなかった