J'utilise nouvelle syntaxe rspec (expect
au lieu de should
) et je voudrais tester si un tableau comprend des éléments d'un autre tableau. Dans l'ancienne syntaxe, ce serait:
array1.should include(array2)
Dans la nouvelle syntaxe, j'ai essayé d'écrire:
expect(array1).to include(array2)
mais j'ai une erreur (c'est tout à fait raisonnable):
TypeError: wrong argument type Array (expected Module)
Alors j'ai écrit:
expect(array1).to be_include(array2)
mais c'est moche ;-) MISE À JOUR: et cela n'a pas fonctionné: apparemment, ça cheks si array2 est élément de array1 pas si tous les éléments de array2 sont inclus dans array1.
Enfin j'ai écrit:
expect(array1 & array2).to eq(array2)
mais ce n'est pas la plus jolie solution. Le savez-vous mieux?
Essaye celui-là:
expect(array1).to include *array2
Pour tester si un tableau est un sous-ensemble d'un autre tableau, il est préférable d'introduire set . Et puis vous pouvez l'écrire comme ceci ... (La solution utilise 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) }
end
end