コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

RSpec3の配列系マッチャを利用シーン別に逆引き表を作ってみた

RSpec3から結構選択肢があるようなので一覧表にしてみる

環境

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18]
$ bundle exec rspec -v
RSpec 3.8
  - rspec-core 3.8.0
  - rspec-expectations 3.8.2
  - rspec-mocks 3.8.0
  - rspec-rails 3.8.1
  - rspec-support 3.8.0

逆引き利用表

利用用途 使うマッチャ
配列の内容が順番含め一致するか eq , match
期待する値が配列に含まれているか include
順番は気にしないが、配列の中身が同じか match_array
指定する要素が配列にすべて含まれているか contain_exactly
異なるマッチャを使って検証したいか match

記述例

RSpec.describe "array_match_sample" do

  let(:demo_array) {[1, "example", variable]}
  let(:variable) {:symbols}
  
  it "eqで内容が==でtrueを返す状態であるかを確認する" do
    expect(demo_array).to eq([1, "example", variable])
  end
  
  it "matchで同一なものかを確認する" do
    expect(demo_array).to match([1, "example", variable])
  end

  it "includeで配列に含まれているかを検証する" do
    expect(demo_array).to include("example")
    expect(demo_array).not_to include("example2")
  end

  it "match_arrayで順番は気にせず同一の配列かを検証する" do
    expect(demo_array).to match_array(["example", 1, :symbols])
    expect(demo_array).not_to match_array(["example", 1, :symbols, "huge"])
  end

  it "contain_exactlyで指定した値がすべて含まれるかを検証する" do
    expect(demo_array).to contain_exactly("example", :symbols, 1)
    expect(demo_array).not_to contain_exactly("example", :symbols)
  end

  it "matchとコンポーザブルマッチャを使って型を検証する" do
    expect(demo_array).to match([be_kind_of(Integer), be_kind_of(String), be_kind_of(Symbol)])
  end
  
end

参考リンク