HTTParty + Webmock |规格内的网址无效

时间:2017-11-21 12:10:06

标签: ruby-on-rails ruby httparty webmock

使用disable_rails_query_string_format运行具有此类查询参数的请求时:

query: {selected_ids: [1,2,3]}

在应用程序中运行代码时工作正常,但在运行规范时,网址会被截断,并且只会占用数组的最后一个元素,因此网址会变为selected_ids=3而不是selected_ids=1&selected_ids=2&selected_ids=3

不知道是否有此事,但我们还使用Webmock在规范内存根请求。

也许有人遇到同样的问题并知道可能导致什么问题?

更新,代码提取

让我们说,这是一项名为客户的服务:

class Client
  include HTTParty

  SOME_ENDPOINT = 'http://someurl.com/some-endpoint'.freeze

  def do_get(options = {})
    self.class.disable_rails_query_string_format
    self.class.get(SOME_ENDPOINT, options)
  end
end

在某些时候它会被执行,让我们说,由控制器执行的某些操作,它将执行委托给资源,资源执行该服务:

# Somewhere in resource
Client.new.do_get(selected_ids: [1, 2, 3])

当上述代码在非测试环境中执行时,Client会正确调用http://someurl.com/some-endpoint?selected_ids=1&selected_ids=2&selected_ids=3

但根据规范,在没有stub_request的情况下执行同样的操作时,会出现Webmock错误,指示未建模的URL,这是不正确的:http://someurl.com/some-endpoint?selected_ids=3

通常,规范没有做一些额外的步骤,看起来像标准RSpec规范:

describe Client
  subject { Client.new.do_get(selected_ids: [1, 2, 3]) }

  it
    subject
  end
end

# -> Webmock error - unregistered request to 
# http://someurl.com/some-endpoint?selected_ids=3,
# but it should be to 
# http://someurl.com/some-endpoint?selected_ids=1&selected_ids=2&selected_ids=3

0 个答案:

没有答案