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

时间:2010-02-10 10:47:10

标签: ruby-on-rails ruby testing mocking rspec

这就是我所拥有的:

it "should be able to get a valid directory path" do  
   @asset.some_file_path.should == "/something/test.jpg"
end

问题是如果没有现有文件,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

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

我正在考虑以下几点:

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

这可能吗?我怎么能这样做?

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

也许你可以用你文件的正确路径伪装。假想您想要返回路径的每个文件

  it "should be able to get a valid directory path" do  
    File.stub!(:exists?).with("my_image_path.jpg").and_return("my_image_path.jpg")
    @asset.some_file_path.should == "my_image_path.jpg"
  end

答案 2 :(得分:-2)

这可能是一个非常无用的答案,因为我自己只是围绕自动化测试,但是:

据我了解,您只需要测试两个条件:文件存在,文件不存在?

测试不存在很容易:使用不存在的my_image_path创建一个Asset,并检查函数是否返回'/not_here_yet.jpg'。

当然你可以用同样的方式测试另一个案例吗?创建一个带有.jpg扩展名的空文件,然后创建一个指向它的资产,并检查该函数是否返回正确的名称?