0

我有一个CommentList带有静态方法的类fetch。问题是,它不是一个 ActiveRecord 模型,但它通过 http 调用来获取数据。

class CommentList
  def self.fetch
    # http-foo here
    return ['some', 'data']
  end
end

现在我想要另一个模型使用这个 fetch 方法并模拟该CommentList#fetch方法以在我的规范中返回给定的数据集。

我只能找到与 DB 一起玩的嘲弄宝石。

我完全忽略了什么吗?

4

1 回答 1

1

如果您使用的是 rspec,应该很容易做到这一点:

CommentList.stub(:fetch => ['some', 'data'])

或者让它更像是一种期望:

CommentList.should_receive(:fetch).and_return(['some', 'data'])

另一个更复杂的解决方案是设置 VCR。基本上它在这种情况下所做的是第一次运行测试时,CommentList 会真正命中外部 http 服务并取回数据。VCR 然后保存该响应,从那时起,它返回缓存的响应。

好消息是,如果您想重新测试外部 API 调用(也许他们的 API 已更改?),您只需删除 VCR 保存的数据,运行测试,您的测试将再次针对外部服务运行并缓存新数据。

于 2013-04-24T17:57:33.597 回答