如何在ruby

时间:2016-10-05 05:53:44

标签: ruby rspec fileutils

大家好我真的需要帮助来解决如何在ruby中的FileUtils类下存根或模拟 chmod 方法。

目前我有这段代码。

def create_file(file)
    unless File.exist?(file)
        FileUtils.mkdir_p(File.dirname(file), :mode => 0755)
        FileUtils.touch file
        FileUtils.chmod(0644, file)
    end
end

/usr/local/something_folder/filePath.fileExtension

下的文件

这是我为上面的代码创建的等效测试代码。

File.stub(:dirname).and_return('fileFullPath')
FileUtils.stub(:mkdir_p).and_return('fileFullPath')
FileUtils.stub(:touch).and_return('fileFullPath')
FileUtils.stub(:chmod).and_return('fileFullPath')

这里的问题是 / usr / local 文件路径下的权限,这就是为什么我要去存根或模拟该方法调用。

如果你能帮我解决这个问题,我会很高兴和感激。

快乐的编码家伙:)

1 个答案:

答案 0 :(得分:1)

你必须考虑的一个嘲弄规则是“只模仿你拥有的东西”。您不拥有的File和FileUtils。如果您真的想要这样做,可以试试gem fakefs。我会推荐另一个approch:

class YourClass
   attr_accessor :file_class, :file_utils_class

   def file_class
      @file_class ||= File
   end

   def file_utils_class
     @file_utils_class ||= FileUtils
   end

   def create_file(file)
     unless file_class.exist?(file)
       file_utils_class.mkdir_p(file_class.dirname(file), :mode => 0755)
       file_utils_class.touch file
       file_utils_class.chmod(0644, file)
     end
   end
 end

这样,您可以在测试期间注入一个与您想要的行为相符的对象。