3

我正在开发 Ruby on Rails gem,我正在尝试 webmock,因为我需要交互(和测试)不受我控制的外部 API。

所以,这是before(:each)因为我在那里存根的片段:

before do
  uri = URI.join(client.class.base_uri, DataComApi::ApiURI.search_contact).to_s
  stub_request(
    :get,
    uri
  ).with(
    query: hash_including({
      'pageSize' => 0,
      'offset'   => 0
    })
  ).to_return(
    body: FactoryGirl.build(
      :data_com_search_contact_response,
      totalHits: 0
    ).to_json
  )
  # DEBUG
  require 'httparty'
  HTTParty.get(
    uri,
    {
      query: {
        offset:   0,
        pageSize: 0
      }
    }
  )
end

在这里你可以看到rspec命令的控制台输出:

  3) DataComApi::Client#search_contact returns instance of SearchContact
     Failure/Error: HTTParty.get(
     WebMock::NetConnectNotAllowedError:
       Real HTTP connections are disabled. Unregistered request: GET https://www.jigsaw.com/rest/searchContact.json?offset=0&pageSize=0

       You can stub this request with the following snippet:

       stub_request(:get, "https://www.jigsaw.com/rest/searchContact.json?offset=0&pageSize=0").
         to_return(:status => 200, :body => "", :headers => {})

       registered request stubs:

       stub_request(:get, "https://www.jigsaw.com/rest/searchContact.json with query params hash_including({"offset"=>0, "pageSize"=>0})")

       ============================================================
     # ./spec/models/client_spec.rb:65:in `block (3 levels) in <top (r

如果我同时删除:queryonHTTParty.get和 in的键stub_request,它可以工作,但我需要这些查询键和值来测试 API。

我什至通过替换 in 进行了测试,stub_request但有同样的问题。uri/searchContact.json/

在这里您可以找到GIST

4

1 回答 1

5

'query'我自己解决了它,看起来像是一个错误:您必须使用(a )存根 webmock 中的请求,String因为Symbol它不起作用。最糟糕的部分是查询哈希中允许使用符号。

我将其报告为错误:https ://github.com/bblimke/webmock/issues/366

编辑 我错了,看起来唯一的方法是:使用查询键作为符号,但哈希值必须是字符串,否则将找不到(查询中的参数始终是字符串)

于 2014-02-07T02:57:01.173 回答