为RSpec数组匹配器启用差异

时间:2017-10-04 13:42:18

标签: arrays ruby rspec diff matcher

RSpec在比较多行字符串时提供“diff”式输出。比较数组时有没有办法做类似的事情(除了将数组转换为多行字符串)?

1 个答案:

答案 0 :(得分:3)

我可能错了,但我不认为这个功能是内置于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库;你可以实现这个,但你认为合适。