RSpec:如何在要测试的对象的方法内部存根?

时间:2018-10-28 05:33:36

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

这里是rspec新手。我知道我可以使用'allow()。toreceive()。and_return'来测试被测对象的方法,但是如果我要测试的对象本身使用的是另一个对象,该对象具有昂贵的方法,我该如何对expensiv进行测试该方法中的e部分,但仍然测试该方法的其余部分?

如果我有类似的方法

class Foo
  def process
   data = DataModel.fetch_data #<-- the expensive process.
    if verify(data)
      [do things]
    end
  end

  private 
  def verify(data)
    [...]
  end
end

那么,我将如何编写一个rspec测试,以便在该方法中向处理方法提供测试数据,以便我可以检查一下verify和“事情”是否正常工作?我不想执行DataModel.fetch,因为它既耗时又昂贵。 (导轨5.2)

1 个答案:

答案 0 :(得分:1)

您可以这样做:

fetched_data = instance_double("TheClassReturnedFrom#fetch_data")
allow(DataModel).to receive(:fetch_data).and_return(fetched_data)