Ruby on rails 如何测试使用puntopagos和rest客户端的控制器操作?

Ruby on rails 如何测试使用puntopagos和rest客户端的控制器操作?,ruby-on-rails,testing,rspec,stub,rspec3,Ruby On Rails,Testing,Rspec,Stub,Rspec3,我有一个控制器,它有一个名为create的POST操作。在创建操作中,我使用了一个类(PuntoPagos::Request),该类使用 class SomeController < ApplicationController def create request = PuntoPagos::Request.new response = request.create #request.create method (another method deeper,

我有一个控制器,它有一个名为
create
的POST操作。在创建操作中,我使用了一个类(
PuntoPagos::Request
),该类使用

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
class SomeController

如何使用RSpec存根rest客户端请求和响应以测试我的创建操作?

只存根
PuntoPagos::request。新建
并继续存根:

response = double 'response'
response.stub(:success?) { true }
request = double 'request'
request.stub(:create) { response }
PuntoPagos::Request.stub(:new) { request }
这是一个成功的请求;再次使用
success?
stubbed返回
false
以测试该分支

一旦你能做到这一点,你就可以用更少的打字来做同样的事情

话虽如此,将PuntoPagos内容提取到一个具有更简单接口的单独类中会更好:

class PuntoPagosService
  def self.make_request
    request = PuntoPagos::Request.new
    response = request.create
    response.success?
  end
end
那你就做吧

PuntoPagosService.stub(:make_request) { true }
在你的测试中