14

ブロックを受け入れ、ファイルを開き、生成して返す関数があります。

def start &block
    .....do some stuff
    File.open("filename", "w") do |f|
        f.write("something")
        ....do some more stuff
        yield
    end
end

rspec を使用してテストを作成しようとしています。File.open をスタブして、実際のファイルを開こうとする代わりに、オブジェクト f (私が提供) をブロックに渡すにはどうすればよいですか? 何かのようなもの:

it "should test something" do
    myobject = double("File", {'write' => true})
    File.should_receive(:open).with(&blk) do |myobject|
        f.should_receive(:write)
        blk.should_receive(:yield) (or somethig like that)
    end
end
4

2 に答える 2

5

私はあなたが探しているのはイールドマッチャーだと思います、すなわち:

it "should test something" do
  # just an example
  expect { |b| my_object.start(&b) }.to yield_with_no_args
end
于 2013-02-19T11:07:52.567 に答える