2014-02-07 3 views
3

Я работаю над камнем Ruby on Rails, и я пытаюсь использовать webmock, потому что мне нужно взаимодействовать (и тестировать) внешний API, который не под моим контролем.Webmock не отвечает на запрос заглушки с запросом

Итак, вот фрагмент кода, который находится в 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 

Если удалить ключ :query как на HTTParty.get, так и в stub_request, он работает, но мне нужны эти ключи и значения для проверки API.

Я испытал даже замену в stub_request, uri с /searchContact.json/, но имел такую ​​же проблему.

Здесь вы можете найти GIST

ответ

4

Я решил это сам, похоже, это ошибка: вы должны окурок запрос в webmock с 'query'String), потому что Symbol не работает. Хуже всего то, что символы разрешены внутри хеша запроса.

Я сообщил об этом как об ошибке: https://github.com/bblimke/webmock/issues/366

Edit Я был неправ, похоже, единственный способ: использование ключа запроса в качестве символа, но значения хэш должны быть строками, в противном случае он не будет найден (параметры в запросе всегда строки)