2014-02-07 2 views
3

Ruby on Rails gem에서 작업하고 있습니다. 내 제어하에 있지 않은 외부 API와 상호 작용 (및 테스트)해야하기 때문에 webmock을 시도하고 있습니다.WebMock이 쿼리로 스텁 요청에 응답하지 않습니다.

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 

내가 제거하는 경우를

그래서, 여기에 내가 거기 스텁 때문에 before(:each)에있는 조각이다 :query 키는 모두 HTTParty.getstub_request에 있지만 작동하지만 API를 테스트하려면 쿼리 키와 값이 필요합니다.

stub_request, uri/searchContact.json/으로 바꾸어도 테스트했지만 동일한 문제가있었습니다. 버그처럼

여기서는 GIST

답변

4

은 나 자신에 의해 그것을 해결 찾을 수 같습니다 Symbol가 작동하지 않기 때문에 당신이 'query'와 webmock의 요청 (A String)를 스텁해야합니다. 최악의 부분은 쿼리 해시 안에 기호가 허용된다는 것입니다. 상징로 사용 쿼리 키를하지만 해시 값은 문자열이어야합니다 유일한 방법처럼 보이는, https://github.com/bblimke/webmock/issues/366

편집 내가 잘못했다 :

나는 버그로보고, 그렇지 않으면 찾을 수 없습니다 (쿼리의 params는 항상 문자열입니다)