【问题标题】:How to mock an array in RSpec?如何在 RSpec 中模拟一个数组?
【发布时间】:2012-01-31 09:15:11
【问题描述】:

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

我试着像这样嘲笑它:

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

这行得通,但是我会为数组中的每个值得到:return_value

还有其他方法吗?

【问题讨论】:

  • 我知道一个解决方案是将 API 的返回对象包装在一个包装器中,然后模拟它,但我试图避免它。

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


【解决方案1】:

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

items = [:return_value1, :return_value2]

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

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

在这种情况下,obj.method 在第一次调用时将返回“1”,而在所有后续调用中返回“2”。

另外,只要你使用块作为存根,你可以在这个块中动态计算返回值。但这被认为不是很好的做法,因为习惯上 stubs 应该返回静态数据。

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

【讨论】:

  • duh,没有考虑创建数组的最简单方法。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
相关资源
最近更新 更多