2014-04-18 6 views
11

Wie Webmock zu stub Anfrage mit einem Körper und Header zu verwenden? Ich habe versucht, regexWebmock Stub Anfrage mit einem beliebigen Körper und Header

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

in rspec zu verwenden, aber es funktioniert nicht, es hat

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

Antwort

3

Schauen Sie sich die Webmock docs on headers. Sie müssen einen Hash-Wert angeben, der weitere Details zu Ihrer Übereinstimmung enthält.

+0

denke ich, ist dieser Abschnitt eine bessere Referenz für die 'headers' aufeinander abgestimmt sind gegen: https://github.com/ bblimke/webmock # matching-header – Aegix

8

sollten Sie in der Lage sein, nur

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

verwenden Wenn Sie sich nicht den Körper oder Header auf dem Stummel angeben, wird es etwas für den Körper oder Header ermöglichen. Dies gilt nicht für Abfrageparameter.

Zum Beispiel dieses Test des Beispielprojektes geht:

bundle exec rspec Ausgang:

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 

spec/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 sion

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

Dies ist nicht wahr, es wird nicht übereinstimmen. – lzap

+1

Ja. Es sollte funktionieren. Ich dachte es auch nicht, aber dann wurde mir klar, dass ich nie 'stub_request' genannt hatte –

+0

Vorsicht vor dem Trailing Slash auf der URL! stub_request (: get, 'h ttp: //www.example.com') passt zu allem, aber stub_request (: get, 'h ttp: //www.example.com/') wird nicht !! Habe etwas Zeit damit verloren. –

Verwandte Themen