在 ruby rspec 中使用 let 时测试和关闭文件对象

Testing and closing file objects while using let in ruby rspec

如果我有这样的class

class Foo < File
  # fun stuff
end

而且我想测试它确实是从 File 继承的,我可以这样写

describe Foo
  let(:a_file) { Foo.open('blah.txt') }

  it "is a File" do
    expect(a_file).to be_a File
  end
end

我的问题是,let() 会在示例运行后负责关闭文件吗?或者我是否需要在某处明确关闭文件。

或者像这样会更好,

it "is a File" do
  Foo.open('blah.txt') do |f|
    expect(f).to be_a File
  end
end

完全忘记了 let()?

我参考了using let and closing files,但我还是不确定。

如果您只打算在一个测试中使用 a_file,那么您的第二个示例很好。

it "is a File" do
  Foo.open('blah.txt') do |f|
    expect(f).to be_a File
  end
end

如果您要多次使用 a_file,您可以这样做:

before do 
 @file = Foo.open('blah.txt')
end

after do
  @file.close
end

it "is a File" do
  expect(@file).to be_a File
end

...