我需要一些代码,假货的实际文件系统到一个假的。 所以,当我启动它转换/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
。 有没有这样做的方法吗? 谢谢!
你有两个选择:
选项1 - 使用宝石伪造出来
FakeFS会做你想要什么,有一些文件系统的操作将无法正常工作的警告。 FakeFS重写Ruby的标准库的各种文件操作的调用,这样的东西可能会丢失,或东西可能不工作的权利。
选项2 - 返工你的代码,使其更容易测试
你基本上是硬编码/
为您的应用程序开始寻找文件的根。 如果你把这个配置,你的代码可以用于测试操纵这一点。
例如:
$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去。