문제

내가 만든 두,나는 코드를 실행하는 것 그것을 호출하는 방법과 거대한 해시으로 인수,나를 확인하려면 하나의 열쇠 인수 및 반환 특정이다.

이것은 내가 뭘

before :each do
  allow(@my_double).to receive(:do_stuff).and_return({stuff: 42})
end
it "can do stuff" do
  expect(@my_double).to receive(:do_stuff) do  |arg|
    expect(arg).to be_a(Hash)
    expect(arg[:my_arg]).to eq(3)
  end
  TestObject.stuff() # will invoke do_stuff on the double
end

무슨 일,첫 번째 시간 do_stuff 라고 반환합니다 true 는 결과 receive 블록하지만,에 대한 후속 호출(에서 테스트를 올립)그것을 정확하게 반환 {stuff: 42} 하지만 이후 첫 번째 호출은 잘못이 나는 방법 예외를 하려고 하면 전화[:stuff] 에 돌아갑니다.

내가 하려고 하자 allow 의 행동이의 두 배 그래서 나는 원하지 않을 넣어 반환에서의 하단 expect..그러나 어떤 방법이 있다.

도움이 되었습니까?

해결책

알 응답이 사용하는 아직 언급되지 않음 인수 matcher hash_including 훨씬 다음과 같 my first comment

expect(@my_double).to receive(:do_stuff).with(hash_including(my_arg: 3))

이 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top