我有一个名为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 }

在你的测试中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top