传递给Array()的RSpec模拟导致Ruby 1.9.2中的错误

时间:2013-05-15 14:02:57

标签: ruby rspec

# expected
Array(Object.new) # => [Object.new]
Array([Object.new]) # => [Object.new]

# but when using an rspec mock
it = RSpec::Mocks::Mock.new
it.respond_to?(:to_a) # => false
Array(it) # => RSpec::Mocks::MockExpectationError: Mock received unexpected message :to_a with (no args)

这只发生在1.9.2。

似乎Array方法正在调用to_a,即使模拟无法响应。

解决方法是:

[it].flatten # => [it]

是Rspec mock或Array method的错误吗? Kernal#Array的文档建议它调用.to_ary然后调用.to_a,但模拟器不会响应,所以它只是像其他对象一样被包装在数组中。

1 个答案:

答案 0 :(得分:0)

已在较新版本的RSpec中修复。