我想stub前两个对HTTParty的调用,并引发异常,然后,第三个调用,应该返回值。
before do
allow(HTTParty).to receive(:get).exactly(2).times.with(url).and_raise(HTTParty::Error)
allow(HTTParty).to receive(:get).with(url).and_return('{}')
end
但是一个允许覆盖另一个。如何设置stub在前几次尝试时引发错误,然后让它返回一个值?
4条答案
按热度按时间a64a0gku1#
根据本期github提供的信息,你也可以使用下面的纯RSpec方法来实现,它利用了使用block定义模拟响应的最通用方法:
lf5gs5x22#
在这种特定情况下,您可以使用WebMock:
使用链式
to_return()
、to_raise()
或to_timeout
声明的多个响应。类似这样的方法应该可以奏效:
SomeException
应该是实际的网络错误。des4xlb03#
您可以使用
Proc
示例的数组来给予完全控制:这样,您可以在多个调用中引发不同的异常,或者只返回值以满足您的需要。
当存根化的响应都被使用时,可以使用类似的方法调用原始响应:
5m1hhzi44#
我喜欢@b-f方法,但是用
#and_invoke
简化了它,而且我已经指定了返回值,所以我只需要知道它们都被使用了。