我大量使用RSpecs 2.13 should_receive(:send).with(...)
功能。我知道它是一个过时的版本,但我必须将它用于一个项目(并且测试套件非常庞大)。
当规范失败时,我得到一个像这样的差异输出:
<FooBar (class)> received :send with unexpected arguments
expected: ({ :foo => bar, :test => "hello"})
got: ({ :foo => bar, :test => "Hello"})
以上论点都只是样本。我的问题是,如果传递给:send
的哈希真的很长,那么很难弄清楚出了什么问题。我启用了RSpec的彩色输出,但这只是将失败的测试用红色着色。
有没有办法为
should_receive
获得彩色差异输出?
前段时间,我编写了自己的匹配器be_matching
,它具有彩色差异输出:
RSpec::Matchers.define :be_matching do |expected|
match do |actual|
actual == expected
end
failure_message_for_should do |actual|
difference = DiffMatcher::Difference.new(expected, actual, :color_enabled=>RSpec::configuration.color_enabled?)
difference.to_s
end
end
但重写所有使用should_receive
语法的测试来使用自定义匹配器会有很多工作。
有没有办法,无论是内置,宝石,还是重新定义should_receive
的方式,以便为失败的测试提供一些彩色差异输出?
修改
我找到了一种解决方法,可以获得更好的差异输出。您可以使用以下块来调用should_receive
:
FooBar.should_receive(:send) do |arg1|
arg1.should == {}
end.and_return(true)
但是,没有块的彩色差异输出将是有用的。
答案 0 :(得分:0)
我相信Rspec将通过defualt为数组提供更好的diff输出。我不记得确切的语法,但例如,像
expected: [a, b, c]
got: [a, d]
diff: - [b]
[c]
+ [d]
根据您的具体情况,您可以将哈希转换为数组以使用它。
myHash.map{ |key, value| value}
或
myHash.values