RSpec: 如何在被测对象的方法内部存根?
RSpec: How to stub inside a method of the object being tested?
这里有一个 rspec 新手。我知道我可以使用 'allow( ).to receive( ).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 测试,我可以在其中为过程方法提供测试数据,以便我可以检查验证和 "do things" 是否正常工作?我不想执行 DataModel.fetch 因为它既费时又费钱。 (Rails 5.2)
你可以这样做:
fetched_data = instance_double("TheClassReturnedFrom#fetch_data")
allow(DataModel).to receive(:fetch_data).and_return(fetched_data)
这里有一个 rspec 新手。我知道我可以使用 'allow( ).to receive( ).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 测试,我可以在其中为过程方法提供测试数据,以便我可以检查验证和 "do things" 是否正常工作?我不想执行 DataModel.fetch 因为它既费时又费钱。 (Rails 5.2)
你可以这样做:
fetched_data = instance_double("TheClassReturnedFrom#fetch_data")
allow(DataModel).to receive(:fetch_data).and_return(fetched_data)