2016-05-06 2 views
0

Следующий код работает webmock 1.20.4, но не с 2.0.1stub_request с Bearer Authorization Header не работает в webmock 2

stub_request(:get, "http://www.myapi.com/my-endpoint") 
     .with(headers: {'Authorization' => "Bearer fake_oauth_token"}) 
     .to_return(:body => mock_response) 

Это код, я гася.

def get_stuff(oauth_token) 
    faraday = Faraday.new(:url => "http://www.myapi.com/my-endpoint", :ssl => {verify: false}) 

    response = faraday.get do |req| 
     req.options[:timeout] = 10 
     req.headers['Authorization'] = "Bearer #{oauth_token}" 
    end 

    if response.status == 200 
     response.body 
    else 
     {error: "failed"}.to_json 
    end 
    end 

Использование assert_requested :get, "http://www.myapi.com/my-endpoint", :headers => {'Authorization' => "Bearer fake_oauth_token"}, :times => 1 и удаление заголовков из stub_request я получаю следующий выход из утверждают.

Failure/Error: assert_requested :get, "#{Conf.graphql[:host]}?query=#{graphql_user_details_query}", :headers => headers, :times => 1 

    The request GET http://www.myapi.com/my-endpoint with headers {'Authorization'=>'Bearer fake_oauth_token'} was expected to execute 1 time but it executed 0 times 

    The following requests were made: 

    GET http://www.myapi.com/my-endpoint with headers {'Accept-Encoding'=>'gzip, compressed', 'Authorization'=>'Basic QmVhcmVyIGZha2Vfb2F1dGhfdG9rZW4=', 'User-Agent'=>'Faraday v0.9.2'} was made 1 time 

Есть ли способ сделать код stub_request работать с webmock 2?

ответ

0

UPDATE: Эта проблема была решена в WebMock 2.0.2

Ниже устарела.

WebMock 2.0 переписывал заголовок авторизации несущей с заголовком Basic Autorization. Я сообщил об этой проблеме на странице gitub webmock (https://github.com/bblimke/webmock/issues/617). До тех пор, пока проблема не будет решена, мы будем исправлять обезьяны, чтобы прокомментировать строки, которые вызывают проблему.

Мы создали файл WebMockHttpClient.rb, который требуется в нашем spec_helper. Это замечает строки, которые перезаписывают заголовок авторизации несущей.

require 'em-http-request' 

module EventMachine 
    class WebMockHttpClient 

    def build_request_signature 
     headers, body = @req.headers, @req.body 

     @conn.middleware.select { |m| m.respond_to?(:request) }.each do |m| 
     headers, body = m.request(self, headers, body) 
     end 

     method = @req.method 
     uri = @req.uri.clone 
     query = @req.query 

     uri.query = encode_query(@req.uri, query).slice(/\?(.*)/, 1) 

     body = form_encode_body(body) if body.is_a?(Hash) 

     headers = @req.headers 

     # if headers['authorization'] 
     # headers['Authorization'] = WebMock::Util::Headers.basic_auth_header(headers.delete('authorization')) 
     # end 

     WebMock::RequestSignature.new(
      method.downcase.to_sym, 
      uri.to_s, 
      :body => body || (@req.file && File.read(@req.file)), 
      :headers => headers 
    ) 
    end 

    end 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^