2011-02-05 7 views
2

rspecでテストするときに、どの引数が非静的メソッドに渡されているかを確認することはできますか?Rspecの非静的メソッドをテストしますか?

クラスAをテストする、つまりクラスAを呼び出したい場合は、クラスBを呼び出します.Bは既にテスト済みです。私がテストしたい唯一のことは、私がb.callingに入ってくる引数をテストするにはどうすればよいB.

class A 
    def method 
    number = 10 
    b = B.new 
    b.calling(number) 
    end 
end 

class B 
    def calling(argument) 
    # This code in this class is already testet 
    end 
end 

に入ってくる引数はありますか?

これまでこれを試してみましたが、これは成功しませんでした。

it "should work" do 
    b = mock(B) 
    b.should_receive(:calling).at_least(1).times 
    A.new.method 
end 

いつも失敗すると、beacuse bは呼び出されませんでした。

答えて

4

あなたの仕様でbはBのAは、(それはあなたがそれをスタブしていないので、新しい呼び出すBの実際のインスタンスを返します)インスタンス化されていない、これを試してみてください。

it "should work" do 
    b = mock(B) 
    B.should_receive(:new).and_return(b) 
    b.should_receive(:calling).at_least(1).times 
    A.new.method 
end 
+0

おかげで、それは働いた! – Oleander

+0

+1、OPは本当に自分自身に、なぜ 'A'が最初に' B 'をどのように構築するのか知っていなければなりません。あるいは 'メソッド'が 'B'を構築してすぐにそれを投げ捨てるのはなぜですか? –

+0

はい、それは病理学的/教育的な例だと思います。 a.method(b)のように、引数として渡されたときにbへの呼び出しをアサートすることがより一般的です。 – nruth

関連する問題