如何在 ruby 中的 FileUtils class 下模拟或存根 chmod 方法

How to mock or stub chmod method under FileUtils class in ruby

大家好,我真的需要帮助,了解如何在 ruby.

中的 FileUtils class 下存根或模拟 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

其中 file 位于 /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 文件路径下的权限,这就是为什么我要存根或模拟该方法调用的原因。

如果你能帮我解决这个问题,我将不胜感激。

快乐的编码家伙:)

您必须考虑的一条模拟规则是 "mock only what you own"。您不拥有的文件和 FileUtils。如果你真的想这样做,你可以尝试 gem fakefs。我会推荐另一种方法:

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

通过这种方式,您可以在测试期间注入一个行为如您所愿的对象。