我想断言数组包含的元素类,我尝试了以下方法:
这不起作用,但它看起来不错且可读:
["String", :symbol, Object.new].should =~ [an_instance_of(String), an_instance_of(Symbol), an_instance_of(Object)]
但给了我以下错误:
Failure/Error: ["String", :symbol, Object.new].should =~ [an_instance_of(String), an_instance_of(Symbol), an_instance_of(Object)]
expected collection contained: [#<RSpec::Mocks::ArgumentMatchers::InstanceOf:0x007f9e6a33dbe0 @klass=String>, #<RSpec::Mocks::ArgumentMatchers::InstanceOf:0x007f9e6a33dbb8 @klass=Symbol>, #<RSpec::Mocks::ArgumentMatchers::InstanceOf:0x007f9e6a33db68 @klass=Object>]
actual collection contained: ["String", :symbol, #<Object:0x007f9e6a33dca8>]
the extra elements were: ["String", :symbol, #<Object:0x007f9e6a33dca8>]
请注意,没有缺少元素。
这可行,但看起来很老套:
["String", :symbol, Object.new].collect{|x| x.class}.should =~ [String, Symbol,Object]
- 有没有更好的方法来断言同样的事情?
- 为什么第一种方式没有缺失元素?