2012-09-28 5 views
5

私はこのようになりますいくつかのRubyのコードを持っている:RSpecの - ブロック引数として使用するテストダブル

Something.create do |x| 
    x.foo = bar 
end 

私がするように、ブロック引数xの代わりにdoubleを使用してテストを書きたいのですが私は次に電話することができます:

x_double.should_receive(:foo).with("whatever"). 

これは可能ですか?

答えて

8
specify 'something' do 
    x = double 
    x.should_receive(:foo=).with("whatever") 
    Something.should_receive(:create).and_yield(x) 
    # call the relevant method 
end 
+0

優秀!ありがとうございます – stubotnik

+3

それは良い答えですが、私はニットをしたいです。 'Something.should_receive(:create)'はテスト - アサーション - ですが、stubotnikがテストしたいと言った動作を主張していません。ですから、 'Something.stub(:create).and_return(x)'を使ってテストセットアップとテスト下の動作を区別します。これは 'Something.create'の動作について何もアサートしていません。 –

関連する問題