source

Rspec: "array.== another_array"여야 하지만 주문과 관련이 없습니다.

factcode 2023. 7. 13. 21:10
반응형

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

반응형