Как проверить функцию, которая берет блок с rspec

У меня есть функция, которая принимает блок, открывает файл, возвращает и возвращает:

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

Ответ 2

Ваш другой выбор - заглушить: открыть с новым объектом файла как таковой:

file = File.new
allow(File).to receive(:open) { file }
file.each { |section| expect(section).to receive(:write) }
# run your method