2012-01-31 75 views
1

我想模拟rspec中的数组(在应用程序中它是来自外部API的返回对象),但我不知道如何。如何在rSpec中模拟数组?

我试图嘲笑这样的:

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

它的工作原理,但我会得到:RETURN_VALUE对阵列中的每个值。 还有别的办法吗?

+1

我知道一个解决方案是将API中的返回对象封装在一个包装中,然后模拟它,但我试图避免它。 – Indigon 2012-01-31 09:16:31

回答

6

我认为你不需要为数组产生测试双打,他们会给你的测试代码增加不必要的复杂性。你可以创建伪阵列,并在以后使用它:

items = [:return_value1, :return_value2] 

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

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

在这当obj.method在第一次被调用时会返回'1',并在所有后续调用中返回'2'。

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

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

呵呵,没有想到创建数组的最简单方法。谢谢 – Indigon 2012-01-31 12:31:18