在编写Mock RSpec方面需要帮助

时间:2011-06-07 13:51:58

标签: ruby-on-rails ruby rspec

我在Ruby on rails项目中有如下代码,以从非rails API获取HTTP响应

的应用程序/模型/ rest_api.rb

require "uri"
require "net/https"
require "net/http"
require "active_support"
class RestApi
  # the URL for the Twitter Trends endpoint
  @url = 'http://api.twitter.com/1/trends.json'

  def self.sampleRes
    uri =  URI.parse( @url)
    request = Net::HTTP::Get.new(uri.request_uri)
    response = http.request(request)
    return response
  end
end

我刚开始学习Ruby on Rails和RSPEC。有人可以帮助我如何编写RSpec for HTTP请求而不实际请求实际的API URL(需要一些模拟)

1 个答案:

答案 0 :(得分:3)

您可以模拟请求部分,并对应该调用的内容等做出预期。

mock_req = double("http request")
mock_req.should_receive(:request)
Net::HTTP::Get.should_receive(:new).and_return(mock_req)

您的代码也可以简化为:

open('http://api.twitter.com/1/trends.json').read

你没有做任何错误处理,状态检查等(也许这是示例代码?)但是,无论你希望你的请求返回什么,你应该模拟/删除这些期望。