使用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