为 RSpec 数组匹配器启用差异化
Enable diffing for RSpec array matcher
RSpec 在比较多行字符串时提供 "diff" 风格的输出。有没有办法在比较数组时做类似的事情(除了将数组转换为多行字符串)?
我可能弄错了,但我不认为此功能是 RSpec 的内置功能。
但是,您可以 implement a custom matcher with a custom error message:
RSpec::Matchers.define(:eq_array) do |expected|
match { |actual| expected == actual }
failure_message do |actual|
<<~MESSAGE
expected: #{expected}
got: #{actual}
diff: #{Diffy::Diff.new(expected.to_s, actual.to_s).to_s(:color)}
MESSAGE
end
end
# Usage:
expect([1, 2, 3]).to eq_array([1, 4, 3])
此演示使用 diffy
库;你可以按照你认为合适的方式实现它。
RSpec 在比较多行字符串时提供 "diff" 风格的输出。有没有办法在比较数组时做类似的事情(除了将数组转换为多行字符串)?
我可能弄错了,但我不认为此功能是 RSpec 的内置功能。
但是,您可以 implement a custom matcher with a custom error message:
RSpec::Matchers.define(:eq_array) do |expected|
match { |actual| expected == actual }
failure_message do |actual|
<<~MESSAGE
expected: #{expected}
got: #{actual}
diff: #{Diffy::Diff.new(expected.to_s, actual.to_s).to_s(:color)}
MESSAGE
end
end
# Usage:
expect([1, 2, 3]).to eq_array([1, 4, 3])
此演示使用 diffy
库;你可以按照你认为合适的方式实现它。