如何在另一种方法中使用时模拟打开?

时间:2014-05-27 23:22:48

标签: ruby rspec open-uri

我有一个看起来像这样的方法:

def set_container_bg
  open(self.page.permanent_screenshot) do |file|
    # some logic with file
  end
end

我正在尝试创建一个rspec测试,但我想在set_container_bg中模拟open方法,以便返回我期望的内容?

当我说它返回时,我的意思是'file'是我知道如何管理的。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

由于内核混合到您正在测试的对象中,您可以在您正在测试的对象中存根open方法。

想象一下,你正在测试一个名为container的对象,这样的事情可以解决这个问题:

file = double(File)
container.stub(:open) { |&block| block.yield file }

答案 1 :(得分:0)

假设您有file个对象,则下面的内容将通过

Object.any_instance.stub(:open).with(anything()).and_return file
open(self.page.permanent_screenshot).should eq file