我正在尝试编写一个匹配器,在将对象转换为Hash之前将其转换为Hash,然后再与预期值进行比较(假设我想比较2个哈希,而不关心键是字符串或符号这一事实。)
我可以轻松定义匹配器
RSpec::Matchers.define :my_matcher do |content|
match { |to_match| my_hash_conversion(to_match) == my_hash_conversion(content)
diffable
end
我添加diffable
,因此当两个对象不匹配时,rspec会显示两个对象的差异。
但是我想显示转换对象的diff而不是原始对象的diff?
我看到他们在Rspec的某个地方有一个Differ类和一个diff_with_hash函数,但我不知道如何使用它(因为它没有真正记录)。
答案 0 :(得分:0)
对于RSpec3,您可以直接使用Diff类。
RSpec::Matchers.define :my_matcher do |expected|
expected_hash = my_hash_conversion(expected)
match do |actual|
actual_hash = my_hash_conversion(actual)
expected_hash == actual_hash
end
failure_message do |actual|
actual_hash = my_hash_conversion(actual)
"expect #{expected_hash} to match #{actual_hash}" +
RSpec::Support::Differ.new.diff(actual_hash, expected_hash)
end
end
注意:RSpec::Support
表示不应该直接使用它。
答案 1 :(得分:-1)
使用failure_message_for_should
阻止: -
failure_message_for_should do |actual|
"expected: #{expected} \n got: #{actual}"
end
然后.to_hash
您需要查看的内容。