RSpec은 여러 줄 문자열을 비교할 때 "diff"스타일 출력을 제공합니다. 배열을 비교할 때 (배열을 여러 줄 문자열로 변환하는 것 이외의) 유사한 작업을 수행 할 수있는 방법이 있습니까?RSpec 배열 일치 자에 대해 diffing 사용
1
A
답변
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
['match_array'] (http://www.rubydoc.info/gsp/rspec-expectations/RSpec/Matchers:match_array)를 찾고 계십니까? 그렇지 않다면, 원하는 행동에는 부족한 것이 있습니까? –
@TomLord'match_array'는 요소의 순서를 고려하지 않습니다. 즉,'expect ([1,2,3].) ~ match_array ([3,2,1])'이 통과합니다. – Stefan
제 경우에는 순서가 중요합니다. – Zack