期望所有数组元素属于同一类

时间:2016-02-19 12:34:14

标签: arrays ruby testing rspec

我想检查数组是否只包含特定类的对象,让我们说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版本视为限制。

2 个答案:

答案 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