我想模拟rspec中的数组(在应用程序中它是来自外部API的返回对象),但我不知道如何。如何在rSpec中模拟数组?
我试图嘲笑这样的:
item = double("item")
item.stub(:[]) { :return_value }
它的工作原理,但我会得到:RETURN_VALUE对阵列中的每个值。 还有别的办法吗?
我想模拟rspec中的数组(在应用程序中它是来自外部API的返回对象),但我不知道如何。如何在rSpec中模拟数组?
我试图嘲笑这样的:
item = double("item")
item.stub(:[]) { :return_value }
它的工作原理,但我会得到:RETURN_VALUE对阵列中的每个值。 还有别的办法吗?
我认为你不需要为数组产生测试双打,他们会给你的测试代码增加不必要的复杂性。你可以创建伪阵列,并在以后使用它:
items = [:return_value1, :return_value2]
在情况下,如果你需要存根方法,并返回第一和后续调用不同的结果,你可以这样做:
obj.stub(:method).and_return('1', '2')
在这当obj.method
在第一次被调用时会返回'1',并在所有后续调用中返回'2'。
此外,就您使用块作为存根,您可以动态计算此块中的返回值。但这被认为不是很好的做法,因为地理位置存根应该返回静态数据。
obj.stub(:method) { Time.now }
呵呵,没有想到创建数组的最简单方法。谢谢 – Indigon 2012-01-31 12:31:18
我知道一个解决方案是将API中的返回对象封装在一个包装中,然后模拟它,但我试图避免它。 – Indigon 2012-01-31 09:16:31