RSpec:如何在被测试对象的方法内部进行存根



这里是rspec新手。我知道我可以使用"allow((.to receive((.and _return"来截取被测对象的一个方法,但如果我正在测试的对象本身使用了另一个有昂贵方法的对象,我该如何截取该方法中的experiiv部分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测试,在那里我可以为流程方法提供测试数据,这样我就可以检查验证和"做事"是否正确?我不想执行DataModel.fetch,因为它既耗时又昂贵。(轨道5.2(

你可以做:

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

最新更新