如何使用rspec模拟/伪造文件的存在?

mar*_*cgg 7 ruby testing rspec ruby-on-rails mocking

这就是我所拥有的:

it "should be able to get a valid directory path" do  
   @asset.some_file_path.should == "/something/test.jpg"
end
Run Code Online (Sandbox Code Playgroud)

问题是如果没有现有文件,some_file_path将返回"/not_here_yet.jpg".

def some_file_path
  if File.exists(self.my_image_path)
    return my_image_path
  else
    return "/not_here_yet.jpg
  end
end
Run Code Online (Sandbox Code Playgroud)

我真的不想在我的测试中创建一个新文件.有没有办法让我伪造文件的存在?

我正在考虑以下几点:

it "should be able to get a valid directory path" do  
   AwesomeFakeFileCreator.create(@asset.my_image_path)
   @asset.some_file_path.should == "/something/test.jpg"
end
Run Code Online (Sandbox Code Playgroud)

这可能吗?我该怎么办?

编辑:我看了一下FakeFS,但我不确定它是否回答了我的问题

nas*_*nas 6

你可以做点什么

it "should be able to get a valid directory path" do  
  File.stub!(:exists?).and_return(true)
  @asset.stub!(:my_image_path).and_return("/something/test.jpg")
  @asset.some_file_path.should == "/something/test.jpg"
end
Run Code Online (Sandbox Code Playgroud)