2015-07-14 13 views
1

В моей программе Ruby (not Rails) я создал глобальные переменные в модуле верхнего уровня. Эти глобальные переменные устанавливаются как клиенты внешних служб, поэтому моя программа вызывает вызовы API, когда они установлены. Я пытаюсь выяснить, как правильно заглушить эти вызовы API в RSpec.RSpec: вызов Stub API, который устанавливает глобальную переменную

Я хотел бы протестировать класс внутри верхнего модуля, который выглядит примерно так. Рабочий не имеет прямого вызова глобальных переменных в любом месте класса.

module TopModule 
    class Worker 
    end 
end 

Вот в модуле верха:

module TopModule 
    # (As an aside, the external service is AWS) 
    $client = ExternalService::Client.new(ExternalService.config) 
end 

Я хотел бы запустить тест RSpec из :: Worker модуле верха, поэтому она передает:

describe TopModule::Worker do 
    it 'shows in various ways that Worker functions' 
end 

Однако, я получаю следующее сообщение об ошибке : Real HTTP connections are disabled. Unregistered request: GET http://... with headers {...} (WebMock::NetConnectNotAllowedError)

Трассировка стека указывает на линию в TopModule, где определяется $ client.

Я также сказал:

You can stub this request with the following snippet: 

stub_request(:get, "http://..."). 
    with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'...', 'User-Agent'=>'Ruby'}). 
    to_return(:status => 200, :body => "", :headers => {}) 

Я до сих пор есть ошибки, когда я добавить окурок к моей спецификации/spec_helper цикла RSpec.configure. Вот соответствующие части в spec_helper:

require 'webmock/rspec' 
require 'codeclimate-test-reporter' 
WebMock.disable_net_connect!(allow: 'codeclimate.com') 

require 'fileutils' 
require 'top_module' 
Dir['./spec/support/**/*.rb'].sort.each { |f| require f } 

RSpec.configure do |config| 
    config.mock_with :rspec do |mocks| 
    mocks.verify_doubled_constant_names = true 
    mocks.verify_partial_doubles = true 
    end 
end 

def files_directory 
    File.dirname(__FILE__) + '/files' 
end 

Где я могу поставить заглушки, так что будет на самом деле обрабатывать API вызова ExternalService? Буду признателен за вашу помощь.

(Этот код основан на моем реальном коде, но не идентичен)

ответ

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

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