配列に含まれる要素のクラスでアサートしたかったので、次の方法を試しました。
これは機能しませんが、見栄えがよく読みやすいです。
["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]
- 同じことを主張するより良い方法はありますか?
- 最初の方法で欠落要素がないのはなぜですか?