2017-10-04 6 views
1

RSpecは、複数行の文字列を比較するときに "diff"形式の出力を提供します。 (配列を複数行の文字列に変換する以外の)配列を比較するときに似たようなことをする方法はありますか?RSpec配列マッチャーのdiffingを有効にする

+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

関連する問題