0

我有一个名为 POST 操作的控制器create。在创建操作中,我使用了一个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 存根其余客户端请求和响应以测试我的创建操作?

4

1 回答 1

1

只需存根PuntoPagos::Request.new并继续存根:

response = double 'response'
response.stub(:success?) { true }
request = double 'request'
request.stub(:create) { response }
PuntoPagos::Request.stub(:new) { request }

那是一个成功的请求;使用 stubbed 再次执行此操作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 }

在你的测试中。

于 2014-07-29T04:40:15.567 回答