我有一个名为create
的POST操作的控制器。在创建操作中,我使用puntopagos gem类(PuntoPagos::Request
)使用rest-client gem对API进行POST:
class SomeController < ApplicationController
def create
request = PuntoPagos::Request.new
response = request.create
#request.create method (another method deeper, really)
#does the POST to the API using rest-client gem.
if response.success?
#do something on success
else
#do something on error
end
end
end
我如何使用RSpec存根rest-client请求和响应以测试我的创建操作?
答案 0 :(得分:1)
只是存根PuntoPagos::Request.new
并继续存根:
response = double 'response'
response.stub(:success?) { true }
request = double 'request'
request.stub(:create) { response }
PuntoPagos::Request.stub(:new) { request }
成功请求的那个;再次使用success?
存根来返回false
以测试该分支。
一旦你完成了这项工作,请查看stub_chain
以减少输入的方式做同样的事情。
话虽如此,将PuntoPagos的东西提取到一个具有更简单界面的单独类中会好得多:
class PuntoPagosService
def self.make_request
request = PuntoPagos::Request.new
response = request.create
response.success?
end
end
然后你可以做
PuntoPagosService.stub(:make_request) { true }
在你的测试中。