如何测试使用puntopagos和rest-client的控制器操作?

时间:2014-07-29 01:12:58

标签: ruby-on-rails testing rspec stub rspec3

我有一个名为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请求和响应以测试我的创建操作?

1 个答案:

答案 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 }

在你的测试中。