RSpec
メソッドが特定のブロックを受け取ることを確認するにはどうすればよいですか? 次の簡単な例を考えてみましょう。
class MyTest
def self.apply_all_blocks(collection, target)
collection.blocks.each do |block|
target.use_block(&block)
end
end
end
target.use_block
によって返される各ブロックで が呼び出されることを検証する仕様が必要ですcollection.blocks
。
次のコードは機能しません。
describe "MyTest" do
describe ".apply_all_blocks" do
it "applies each block in the collection" do
target = double(Object)
target.stub(:use_block)
collection = double(Object)
collection.stub(:blocks).and_return([:a, :b, :c])
target.should_receive(:use_block).with(:a)
target.should_receive(:use_block).with(:b)
target.should_receive(:use_block).with(:c)
MyTest.apply_all_blocks(collection, target)
end
end
end
(また、use_block
必ずしもブロックを呼び出すとは限らないため、ブロックが を受け取ることをテストするだけでは十分ではcall
ありません。同様に、私が望むことをするとは思いませんtarget.should_receive(:use_block).and_yield
。)