我在Ruby on rails项目中有如下代码,以从非rails API获取HTTP响应
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(需要一些模拟)
答案 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
你没有做任何错误处理,状态检查等(也许这是示例代码?)但是,无论你希望你的请求返回什么,你应该模拟/删除这些期望。