arrays - 为 RSpec 数组匹配器启用差异

标签 arrays ruby rspec diff 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图书馆;您可以按照您认为合适的方式实现此操作。

关于arrays - 为 RSpec 数组匹配器启用差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46566468/

相关文章:

ruby-on-rails - 断言 Redis 发布

c++ - 在 C++ 中使用循环将不同的数组传递给同一个函数?

c++ - 对未知大小数组的引用的列表初始化 : is it supposed to deduce the array size?

c - 增加矩阵的大小

ruby-on-rails - 在 Ruby 中搜索项目的对象数组

java - 媒体转换库

ruby-on-rails - 删除记录之前不会出现确认弹出窗口

ruby - 如何为 Ruby 中的哈希列表中的每个键提取更大的值

ruby-on-rails - Rails + Capybara + poltergeist ArgumentError : rack-test requires a rack application,,但是没有给出

ruby-on-rails - RubyMine 6.3 中 RSpec 文件夹上下文菜单中的测试