大家好我真的需要帮助来解决如何在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 文件路径下的权限,这就是为什么我要去存根或模拟该方法调用。
如果你能帮我解决这个问题,我会很高兴和感激。
快乐的编码家伙:)
答案 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
这样,您可以在测试期间注入一个与您想要的行为相符的对象。