我想检查数组是否只包含特定类的对象,让我们说Float
。
目前的一个工作示例:
it "tests array_to_test class of elements" do
expect(array_to_test.count).to eq(2)
expect(array_to_test[0]).to be_a(Float)
expect(array_to_test[1]).to be_a(Float)
end
有没有办法验证array_to_test
是否只包含Float
个实例?
示例非工作伪代码:
it "tests array_to_test class of elements" do
expect(array_to_test).to be_a(Array[Float])
end
不要将Ruby和Rspec版本视为限制。
答案 0 :(得分:13)
尝试all
:
expect(array_to_test).to all(be_a(Float))
答案 1 :(得分:-1)
你可以使用ruby方法:
expect(array_to_test.map(&:class).uniq.length) to eq(1)
或者为了更好的练习,使用这些方法实现Helper:
RSpec::Matchers.define :all_be_same_type do
match do |thing|
thing.map(&:class).uniq.length == 1
end
end
然后以这种方式使用它:
expect(array_to_test) to all_be_same_type