Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用rest客户端资源检查响应代码_Ruby_Rspec_Rest Client - Fatal编程技术网

Ruby 如何使用rest客户端资源检查响应代码

Ruby 如何使用rest客户端资源检查响应代码,ruby,rspec,rest-client,Ruby,Rspec,Rest Client,我对Ruby还不太熟悉。我正试图针对以下类编写RSpec测试: require 'rest-client' class Query def initialize @@log = Logger.new(STDOUT) RestClient.log = @@log @@user = "joe@example.com" @@password = "joe123" end def get_details begin url = "htt

我对Ruby还不太熟悉。我正试图针对以下类编写RSpec测试:

require 'rest-client'

class Query
  def initialize
    @@log = Logger.new(STDOUT)
    RestClient.log = @@log
    @@user = "joe@example.com"
    @@password = "joe123"
  end

  def get_details
    begin
      url = "http://api.example.com/sample/12345"
      resource = RestClient::Resource.new(url, :user => @@user, 
        :password => @@password, :content_type => :json, :accept => :json)
      details = resource.get
    rescue => e
      throw e # TODO: something more intelligent
    end
  end
end
我发现与返回
响应的
RestClient.get
不同,
Resource.get
字符串的形式返回响应体。我想让响应正常工作,因为我想扩展它以进行不同的子资源调用

有没有办法找到GET调用响应的HTTP状态码?这将允许我编写一个测试,如:

require 'rspec'
require_relative 'query'

describe "Query site" do
  before :all do
    @query = Query.new
  end

  it "should connect to site" do
    details = @query.get_details
    expect(details).to_not be_nil
    expect(details.code).to eq(200)
    expect(details.body).to match /description12345/
  end
end

Get返回从String类继承的RestClient::Response类的实例


您仍然可以通过调用方法code
details.code
来检查返回代码。其他方法有
details.headers
details.cookies

等,这些都不是我的经验。当我检查
details.class
时,它返回
String
@neontapir RestClient扩展它从http请求获得的字符串,并使用RestClient::Response模块扩展它。所以
details.is_是一个?(字符串)
details.is_?(RestClient::Response)
。如果您尝试运行
details.code
,它将在AbstractResponse中返回代码详细信息。RestClient::Response的代码可以找到谢谢,我理解现在发生的事情。谢谢你的耐心!