stub_request с заголовком Bearer Authorization не работает в webmock 2

Следующий код работает с webmock 1.20.4, но не с 2.0.1.

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, я получаю следующий вывод из assert.

   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?


person TTransmit    schedule 06.05.2016    source источник


Ответы (1)


ОБНОВЛЕНИЕ: эта проблема была исправлена ​​в WebMock 2.0.2

Следующее устарело.

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

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

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
person TTransmit    schedule 10.05.2016