我需要一些代码将实际的文件系统伪造成伪造的。因此,当我启动它时会将/home/user/Documents/fake_fs
转换为/
,因此每个Dir
或File
调用都会转到该目录。一个例子:
我想在/some_file
上创建一个文件,所以我使用:
File.open('/some_file', 'w') do |f|
f.puts 'something on this file'
end
它会在/home/user/Documents/fake_fs/some_file
而不是/some_file
上写下来。有没有办法做到这一点?谢谢!
答案 0 :(得分:2)
你有两个选择:
FakeFS将完全按照您的意愿执行,但需要注意的是某些文件系统操作无法正常工作。 FakeFS在Ruby标准库中重写了各种文件操作调用,因此可能会遗漏某些内容,或者可能无法正常工作。
您基本上将/
硬编码为应用开始查找文件的根源。如果您将其设置为可配置,则您的代码可以对此进行操作以进行测试。
例如:
$root = ENV['ROOT_DIR'] || '/'
File.open(File.join($root,'some_file'),'w') do |file|
# whatever
end
然后,您的测试可以将ROOT_DIR
设置为您想要设置的位置。
chroot
也可能有助于这样做,例如
Dir.chroot(ENV['ROOT_DIR'] || '/')
File.open('/some_file','w') do |file|
# whatever
end
有关详情,请参阅man chroot
。
就个人而言,我会选择2。