我试图在rspec中模拟一个数组(在app中它是来自外部API的返回对象),但我不知道如何。
我试着像这样嘲笑:
item = double("item")
item.stub(:[]) { :return_value }
有效,但后来我会得到:数组中每个值的return_value。 还有另一种方式吗?
答案 0 :(得分:8)
我认为您不需要为数组生成测试双精度,它们会为您的测试代码添加不必要的复杂性。你可以创建假数组并在以后使用它:
items = [:return_value1, :return_value2]
如果你需要存根方法并为第一次和后续调用返回不同的结果,你可以这样做:
obj.stub(:method).and_return('1', '2')
在这种情况下,obj.method
首次调用时返回“1”,后续调用返回“2”。
此外,就使用块存根而言,您可以动态计算此块中的返回值。但这被认为不是很好的做法,因为惯用的存根应该返回静态数据。
obj.stub(:method) { Time.now }