如何测试使用puntopagos和rest-client的控制器操作?
-
20-12-2019 - |
题
我有一个名为POST动作的控制器 create
.在创建操作中,我使用 puntopagos宝石 类(PuntoPagos::Request
)使用 rest-客户宝石 向API发布帖子:
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请求和响应以测试我的create操作?
解决方案
只是存根 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 }
在你的测试中。
不隶属于 StackOverflow