2017-10-04 103 views
1

比較多行字符串時,RSpec提供「差異」式輸出。在比較數組時,有沒有辦法做類似的事情(除了將數組轉換爲多行字符串)?爲RSpec數組匹配器啓用差異

+0

是['match_array'](http://www.rubydoc.info/github/rspec/rspec-expectations/RSpec/Matchers:match_array)你在找什麼?如果不是,那麼它缺乏什麼期望的行爲? –

+1

@TomLord'match_array'不考慮元素的順序,即'expect([1,2,3])到match_array([3,2,1])'過去。 – Stefan

+0

就我而言,訂單很重要。 – Zack

回答

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庫;無論你認爲合適,你都可以實現這一點。

+0

這就是我正在尋找。對我來說,關鍵是弄清楚如何調用內置的差異。一篇較早的文章警告不要直接使用這些差異。 https://stackoverflow.com/questions/12551564/how-to-write-a-diffable-matcher-with-rspec2 – Zack