我正在开发一个Ruby应用程序,它需要具有特定的目录结构才能正常工作。为了确保这种情况,我创建了一些用于测试的临时目录(rspec)。我试图保存当前目录,并在测试完成后恢复它,但看起来Dir.pwd()
返回nil。是否有可能没有当前目录?这在任何地方都没有记录......
代码:
before :each do
# make a directory to work in
@olddir = Dir.pwd() #=> returns nil???
@dir = Dir.mktmpdir('jekyll')
end
after :each do
Dir.chdir(@olddir) #=> this fails
FileUtils.rm_rf(@dir)
end
it "should not blow up" do
1.should == 1
end
如果我将其更改为此工作正常,但无缘无故地更改为主目录似乎是不好的形式:
before :each do
@dir = Dir.mktmpdir('jekyll')
end
after :each do
Dir.chdir() #=> works, but feels wrong
FileUtils.rm_rf(@dir)
end
it "should not blow up" do
1.should == 1
end
答案 0 :(得分:2)
我正在回答我自己的问题,因为我弄清楚出了什么问题。我应该包括整个测试(duh),看起来更像是这样:
context 'one' do
before :all do
# make a directory to work in
@dir = Dir.mktmpdir('foo')
end
after :all do
FileUtils.rm_rf(@dir)
end
it 'should not blow up' do
1.should == 1
end
end # end context 'one'
context 'two' do
before :each do
# make a directory to work in
@olddir = Dir.pwd()
@dir = Dir.mktmpdir('bar')
Dir.chdir(@dir)
end
after :each do
Dir.chdir(@olddir)
FileUtils.rm_rf(@dir)
end
it "should not blow up" do
1.should == 1
end
end # end context 'two'
问题(当然,现在很明显)是我删除pwd
并获得ENOENT
,因为当前目录已取消链接。这没有在Ruby中记录,因为它是一个文件系统错误,而不是Ruby代码中的错误。
我认为,从每次新测试开始,rspec都不会从头开始创建新的运行环境(正如我所假设的那样)。经验教训。