伪造的文件系统为Ruby(Fake filesystem for Ruby)

2019-07-29 02:19发布

我需要一些代码,假货的实际文件系统到一个假的。 所以,当我启动它转换/home/user/Documents/fake_fs/ ,所以每一个DirFile呼叫转至该目录。 一个例子:

我想打一个文件/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 。 有没有这样做的方法吗? 谢谢!

Answer 1:

你有两个选择:

选项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去。



文章来源: Fake filesystem for Ruby