如何在 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
通过这种方式,您可以在测试期间注入一个行为如您所愿的对象。
大家好,我真的需要帮助,了解如何在 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
通过这种方式,您可以在测试期间注入一个行为如您所愿的对象。