我有一个CommentList
类,其中包含静态方法fetch
。问题是,它不是ActiveRecord模型,而是进行http调用以获取数据。
class CommentList
def self.fetch
# http-foo here
return ['some', 'data']
end
end
现在我希望其他模型使用此fetch方法并模拟CommentList#fetch
方法以返回我的规范中的给定数据集。
我只能找到与数据库一起玩的嘲笑宝石。
我完全忽视了什么吗?
答案 0 :(得分:1)
如果您正在使用rspec,那么应该很容易做到这样:
CommentList.stub(:fetch => ['some', 'data'])
或使其更具期待性:
CommentList.should_receive(:fetch).and_return(['some', 'data'])
另一个更精细的解决方案是设置VCR。基本上它在这种情况下的作用是第一次运行测试时,CommentList会真正击中外部http服务并获取数据。 VCR然后保存该响应,从那时起,它返回缓存的响应。
好消息是,如果您想重新测试外部API调用(可能是他们的API已更改?),您只需删除VCR保存的数据,运行测试,您的测试将再次针对外部服务和缓存运行新数据。