2011-11-08 7 views
3

にRR(ダブルルビー)を使用してブロックを持つメソッドを模擬するにはどうすればよい私はFacebookの要求を行うためにコアラの宝石を使用していますが、私は次のコードを持っている:私はモックとしたいあなたがRailsの3

@graph = Koala::Facebook::API.new(oauth_token) 
    @graph.batch do |batch_api| 
    #... do stuff here 
    end 

を私たちがそこでやっていることをシミュレートするバッチコール。

私はRRに何があるのですか?

oauth_token= "Sometoken" 
batch_api_mock = nil 
graph_mock = mock(Koala::Facebook::API).new(oauth_token).mock! 
graph_mock.batch.returns do 
    yield batch_api_mock if block_given? 
end 

問題はblock_givenですか?私のソースにブロックが渡されていても、falseを返します。

RRを使用してブロックを取得する方法はどうすればよいですか?

答えて

5

Kオープンチケットを調べたところ、その答えは、ブロックへの最初の引数が関数に渡されるブロックであるRR :: ProcFromBlockであることがわかりました。ここでは、コードを修正して動作させます。

oauth_token= "Sometoken" 
batch_api_mock = nil 
graph_mock = mock(Koala::Facebook::API).new(oauth_token).mock! 

#The block is passed in as a proc as the first argument to the returns block. 
graph_mock.batch.returns do |proc_as_block| 
    proc_as_block.call 
end 

誰かが時間を節約するのに役立ちます。彼らはドキュメントにこの小さな宝石を追加する必要があります

+0

私はあなたがreadmeパッチを見ただけでgraph_mock.batch.yields – Sebastian

+0

を使うことができます:それは 'batch.returns'か' batch.yeilds'ですか?また、これはRRの 'new_instance_of'を使って新しいインスタンスに二倍にバインドするのですか? – Hedgehog

+0

この方法は私のために働いていません。詳細はこちら:http://stackoverflow.com/questions/15030235/yield-to-a-block-using-rr – Raphael

関連する問題