2017-10-04 11 views
1

RSpec은 여러 줄 문자열을 비교할 때 "diff"스타일 출력을 제공합니다. 배열을 비교할 때 (배열을 여러 줄 문자열로 변환하는 것 이외의) 유사한 작업을 수행 할 수있는 방법이 있습니까?RSpec 배열 일치 자에 대해 diffing 사용

+0

['match_array'] (http://www.rubydoc.info/gsp/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