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

时间:2015-01-07 20:05:01

标签: ruby testing rspec

如果我有这样的课程

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 letclosing files作为参考,但我仍然不确定。

1 个答案:

答案 0 :(得分:3)

如果您只在一次测试中使用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

...