2014-04-18 5 views
11

본문 및 머리글을 사용하여 WebMock을 사용하여 요청을 스텁하는 방법은 무엇입니까? 내가 정규식을 RSpec에있는본문 및 머리글이 포함 된 웹 스텁 요청

WebMock.stub_request(:post, 'api.quickblox.com/').with(:body => /.*?/, :headers => /.*?/).to_return(:status => 201, :body => "", :headers => {}) 

을 사용하려고하지만 그것은 작동하지 않습니다, 그것은

NoMethodError: 
    undefined method `map' for /.*?/:Regexp 

답변

3

체크 아웃 Webmock docs on headers 있습니다. 일치하는 항목에 대한 자세한 정보가 담긴 해시를 제공해야합니다.

+0

나는이 부분은'headers'가에 대해 일치 방법에 대한 더 나은 참조 생각 bblimke/webmock # matching-header – Aegix

8

당신은 스텁 자체에 신체 또는 헤더를 지정하지 않으면 단지

WebMock.stub_request(:post, 'api.quickblox.com/') 
    .to_return(status: 201, body: 'whatever', headers: { some_kind_of: 'header' }) 

을 사용할 수 있어야합니다, 그것은 신체 또는 헤더 아무것도 수 있습니다. 쿼리 매개 변수에는 적용되지 않습니다.

예를 들어,이 샘플 프로젝트의 테스트에 통과 :

bundle exec rspec 출력 :

Test 
    does a thing 

Finished in 0.00379 seconds (files took 0.25797 seconds to load) 
1 example, 0 failures 

lib 디렉토리/test.rb

require 'faraday' 
require 'json' 

class Test 
    def self.do_a_thing 
    JSON.parse(Faraday.get('http://www.example.com') do |request| 
     request.headers['Something'] = 'anything' 
     request.body = 'bla bla bla' 
    end.body) 
    end 
end 

사양/test_spec.rb

require_relative '../lib/test.rb' 
require 'webmock/rspec' 

describe Test do 
    WebMock.stub_request(:get, 'http://www.example.com') 
    .to_return(body: '{ "this": "is a test" }') 

    it 'does a thing' do 
    expect(described_class.do_a_thing).to include({ 'this' => 'is a test' }) 
    end 
end 

.ruby-ver https://github.com/ : 시온

ruby-2.0.0 

Gemfile

gem 'rspec' 
gem 'webmock' 
gem 'faraday' 

Gemfile.lock는

GEM 
    specs: 
    addressable (2.3.8) 
    crack (0.4.2) 
     safe_yaml (~> 1.0.0) 
    diff-lcs (1.2.5) 
    faraday (0.9.1) 
     multipart-post (>= 1.2, < 3) 
    multipart-post (2.0.0) 
    rspec (3.2.0) 
     rspec-core (~> 3.2.0) 
     rspec-expectations (~> 3.2.0) 
     rspec-mocks (~> 3.2.0) 
    rspec-core (3.2.3) 
     rspec-support (~> 3.2.0) 
    rspec-expectations (3.2.1) 
     diff-lcs (>= 1.2.0, < 2.0) 
     rspec-support (~> 3.2.0) 
    rspec-mocks (3.2.1) 
     diff-lcs (>= 1.2.0, < 2.0) 
     rspec-support (~> 3.2.0) 
    rspec-support (3.2.2) 
    safe_yaml (1.0.4) 
    webmock (1.20.4) 
     addressable (>= 2.3.6) 
     crack (>= 0.3.2) 

PLATFORMS 
    ruby 

DEPENDENCIES 
    faraday 
    rspec 
    webmock 

BUNDLED WITH 
    1.10.5 
+2

사실이 아니므로 일치하지 않습니다. – lzap

+1

예. 그것은 작동해야합니다. 나는 그것도 생각하지 않았다. 그러나 그때 나는 실제로'stub_request'를 결코 호출하지 못했다는 것을 깨달았다. –

+0

url에 슬래 이징이 있음을 알아라! stub_request (: get, 'h ttp : //www.example.com')는 어떤 것과도 일치하지만 stub_request (: get, 'h ttp : //www.example.com/')는 그렇지 않습니다. 이것에 약간의 시간을 낭비했다. –