Rspec :“array.should == another_array”이지만 순서는 신경 쓰지 않습니다
배열을 비교하고 순서에 관계없이 동일한 요소를 포함하고 있는지 확인하고 싶습니다. RSpec에서이를 수행하는 간결한 방법이 있습니까?
허용되지 않는 방법은 다음과 같습니다.
#to_set
예를 들면 다음과 같습니다.
expect(array.to_set).to eq another_array.to_set
또는
array.to_set.should == another_array.to_set
배열에 중복 된 항목이 있으면 실패합니다.
#sort
예를 들면 다음과 같습니다.
expect(array.sort).to eq another_array.sort
또는
array.sort.should == another_array.sort
배열 요소가 구현되지 않으면 실패합니다. #<=>
시험 array.should =~ another_array
찾을 수있는이 I에 가장 좋은 문서는 코드 자체이며, 여기 .
RSpec 2.11부터 사용할 수 있습니다 match_array
.
array.should match_array(another_array)
어떤 경우에는 더 읽기 쉽습니다.
[1, 2, 3].should =~ [2, 3, 1]
# vs
[1, 2, 3].should match_array([2, 3, 1])
나는 =~
예측할 수없는 것으로 나타 났으며 명백한 이유없이 실패했습니다. 지난 2.14부터는 아마도
expect([1, 2, 3]).to match_array([2, 3, 1])
사용 match_array
인수, 또는 다른 배열을, contain_exactly
별도의 인수로 각 요소를 가져 와서 읽을 수 있도록 때로는 유용하다. ( 문서 )
예 :
expect([1, 2, 3]).to match_array [3, 2, 1]
또는
expect([1, 2, 3]).to contain_exactly 3, 2, 1
RSpec 3의 경우 contain_exactly
:
자세한 내용은 https://relishapp.com/rspec/rspec-expectations/v/3-2/docs/built-in-matchers/contain-exactly-matcher 를 참조 하십시오 .
contains_exactly 매처는 실제 배열과 예상 배열 간의 순서 차이를 무시하는 방식으로 배열을 서로 테스트하는 방법을 제공합니다. 예를 들면 다음과 같습니다.
expect([1, 2, 3]).to contain_exactly(2, 3, 1) # pass expect([:a, :c, :b]).to contain_exactly(:a, :c ) # fail
다른 사람들이 지적했듯이 반대의 주장을 원한다면 배열이 내용과 순서를 모두 일치해야한다고 가정하십시오 eq
.
expect([1, 2, 3]).to eq([1, 2, 3]) # pass
expect([1, 2, 3]).to eq([2, 3, 1]) # fail
잘 문서화되지 않았지만 어쨌든 링크를 추가했습니다.
Rspec3 문서
expect(actual).to eq(expected)
Rspec2 문서
expect([1, 2, 3]).to match_array([2, 3, 1])
'IT story' 카테고리의 다른 글
대문자로 "정적 최종 로거"를 선언해야합니까? (0) | 2020.04.16 |
---|---|
JavaScript를 사용하여 URL에 매개 변수 추가 (0) | 2020.04.16 |
라 라벨 5-장인 씨 [ReflectionException] Class SongsTableSeeder가 없습니다 (0) | 2020.04.16 |
linq를 사용하여 구별 선택 (0) | 2020.04.16 |
JavaScript / JQuery : $ (window) .resize 크기 조정이 완료된 후 실행하는 방법은 무엇입니까? (0) | 2020.04.16 |