RSpec: How could I use the array include matcher in the expect syntax RSpec: How could I use the array include matcher in the expect syntax ruby ruby

RSpec: How could I use the array include matcher in the expect syntax


You need to splat the arguments when passing them to the array matcher:

expect(array1).to include(*array2)

This is because you usually list out literals, e.g.:

expect([1, 2, 3]).to include(1, 2)

That said, expect(array1).to include(array2) should not fail with a weird error like you got, and in fact it works and passes in an example like:

  it 'includes a sub array' do    array2 = ["a"]    array1 = [array2]    expect(array1).to include(array2)  end


Try this one:

expect(array1).to include *array2


To test if one array is subset of another array its perhapse good idea to introduce set. And then you can write it like this... (Solution uses Set#subset?)

require "set"describe "Small test" do  let(:array1) { %w{a b c d} }  let(:array2) { %w{b c} }  let(:array1_as_set) { array1.to_set }  let(:array2_as_set) { array2.to_set }  subject { array2_as_set }  context "inclusion of w/ \"expect\"" do    it { expect(subject).to be_subset(array1_as_set) }  end  context "inclusion of w/ \"should\"" do    it { should be_subset(array1_as_set) }  endend