2013-07-02 5 views
2

저는 rspec-spies을 사용하고 있으며 모든 호출이 완료된 후에 스파이를 검사 할 수 있는지 궁금합니다. 예를 들어rspec-spies는 스텁 메소드 및 메소드 스파이에 대한 호출 인수를 검사합니다.

, 내가

# setup 
Post.stub(:find).with(@post.id).and_return(@post) 

do_something_to_call_post_find() 

# verify find was called 
Post.should have_received(:find).with(@post.id) 

이 잘 작동하지만, 포스트 하지 않았다 경우가 내가 도움이되지 않는 오류 메시지가, 예상되는 인수를받을 뭔가를 할 경우 (기본적으로 "포스트 받았어야 발견 123 "). 대신, `find에 대한 실제 호출이 무엇인지보고 싶습니다.

do_something_to_call_post_find() 직후에 일시 중지 할 수 있지만 모든 통화/인수를 스텁/스파이로 나열하는 방법이 있습니까? 내가 @post.id is an integer, 내 컨트롤러 테스트를 문자열로 (아이디 포함) PARAMS를 전달 Post.should have_received(:find).with(@post.id)를 기다리고 있었다 -

실제 사용 사례 이 사람은 오늘 나를 붙 잡았다. 실제 통화를 검사 할 수 있다면 123"123"의 차이를 보았을 것입니다.

답변

2

이 부족은 rspec 2.14.0.rc1에서 더 이상 문제가되지 않습니다. rspec 2.14.0.rc1은 rspec-spies 기능이 개선되어 github에서 사용할 수 있습니다. 다음과 같은 사양의 실행 예

: https://github.com/technicalpickles/rspec-spies/blob/master/lib/rspec-spies.rb에서 have_received 정합 정의의 검사에 기초하여 비공식적 시험 :

F 

Failures: 

    1) test should show differences 
    Failure/Error: Foo.should have_received(:bar).with('123') 
     <Foo (class)> received :bar with unexpected arguments 
     expected: ("123") 
       got: (123) 
    # ./foo_spec.rb:10:in `block (2 levels) in <top (required)>' 

Finished in 0.00082 seconds 
1 example, 1 failure 

Failed examples: 

rspec ./foo_spec.rb:7 # test should show differences 
Peters-MacBook-Air-2:botmetrics palfvin$ 

업데이트 :

class Foo 
    def self.bar(arg) 
    end 
end 

describe "test" do 
    it "should show differences" do 
    Foo.stub(:bar) 
    Foo.bar(123) 
    Foo.should have_received(:bar).with('123') 
    end 
end 

다음과 같은 출력을 생성 수신 된 메시지는 다음과 같이 프로그래밍 방식으로 액세스 할 수 있습니다.

Foo.__send__(:__mock_proxy).instance_variable_get("@messages_received") 

여기서 Foo은 시험용입니다.

+0

고마워, 나는 그것을 깨닫는다. 그러나 그것은 정말로 그 질문에 대답하지 않는다. rspec 2.14가 스파이/스텁 호출을 검사하는 방법을 제공합니까? –

+0

실제 값과 예상 값의 차이를 보여줍니다. 그것이 제가 언급 한 "부족"입니다. 통합이 아닙니다. 너 다른 걸 찾고있어? –

+0

예, 메소드에 대한 호출 및 각각의 인수를 표시하는 무언가를 찾고 있습니다. (예상 값과 일치하는지 여부 만이 아님) –