【问题标题】:How can I mock/fake the existence of a file using rspec?如何使用 rspec 模拟/伪造文件的存在?
【发布时间】:2010-02-10 10:47:10
【问题描述】:

这就是我所拥有的:

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,但我不确定它是否能回答我的问题

【问题讨论】:

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


    【解决方案1】:

    你可以做一些事情

    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
    

    【讨论】:

    • 你能详细说明一下这是做什么的吗?
    • 第一行是存根文件存在返回 true,第二行是存根资产对象上的 my_image_path 方法并返回文件路径,在这种情况下您的 some_file_path 方法将返回,即整个规范示例是关于。总而言之,如果存在则返回路径。
    • 并不是说你必须让我开心或其他什么——我没有问这个问题——但恐怕我不明白这一点。
    • @Shadowfirebird 如果你指出你不明白的地方,那么我将能够更具体地解决这个问题:)
    • 假设 my_image_path 只是一个字符串属性,没有理由存根 my_image_path。简单地存根 File.exists 就可以了。
    【解决方案2】:

    也许您可以使用文件的正确路径进行伪造。为每个要返回路径的文件伪造

      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
    

    【讨论】:

      【解决方案3】:

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

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

      测试不存在非常简单:使用不存在的 my_image_path 创建一个 Asset,并检查函数返回 '/not_here_yet.jpg'。

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

      【讨论】:

      • 我不想动态创建文件。测试会更慢,我必须格外小心地创建/删除文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 2010-11-28
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多