如何在rSpec中模拟数组?

时间:2012-01-31 09:15:11

标签: ruby-on-rails ruby unit-testing rspec rspec-rails

我试图在rspec中模拟一个数组(在app中它是来自外部API的返回对象),但我不知道如何。

我试着像这样嘲笑:

item = double("item")
item.stub(:[]) { :return_value }

有效,但后来我会得到:数组中每个值的return_value。 还有另一种方式吗?

1 个答案:

答案 0 :(得分:8)

我认为您不需要为数组生成测试双精度,它们会为您的测试代码添加不必要的复杂性。你可以创建假数组并在以后使用它:

items = [:return_value1, :return_value2]

如果你需要存根方法并为第一次和后续调用返回不同的结果,你可以这样做:

obj.stub(:method).and_return('1', '2')

在这种情况下,obj.method首次调用时返回“1”,后续调用返回“2”。

此外,就使用块存根而言,您可以动态计算此块中的返回值。但这被认为不是很好的做法,因为惯用的存根应该返回静态数据。

obj.stub(:method) { Time.now }