Rspec: "array.== 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
제가 찾을 수 있는 가장 좋은 문서는 여기 있는 코드 그 자체입니다.
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 을 참조하십시오. 단, 발췌문은 다음과 같습니다.
contain_exactly matcher는 실제 배열과 예상 배열 간의 순서 차이를 무시하는 방식으로 배열을 서로 테스트하는 방법을 제공합니다.예:
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])
언급URL : https://stackoverflow.com/questions/2978922/rspec-array-should-another-array-but-without-concern-for-order
'source' 카테고리의 다른 글
Oracle Solaris 11에 GCC 설치 (0) | 2023.07.13 |
---|---|
R 메모리 관리 / 크기가 nMb인 벡터를 할당할 수 없습니다. (0) | 2023.07.13 |
한 번에 4천만 개의 mysql 셀 업데이트 (0) | 2023.07.13 |
Tomcat을 시작하는 데 너무 많은 시간이 소요됨 - Java SecureRandom (0) | 2023.07.13 |
삽입에서 복사한 iframe에 올바른 URL이 표시되지 않음 버튼 (0) | 2023.07.13 |