2010-12-31 2 views
0

Мне нужны разные настройки для моих модульных тестов и разные настройки для моих тестов интеграции. ПримерКак настроить интеграционные тесты с помощью rspec 2?

Для модульных тестов, я хотел бы сделать

WebMock.disable_net_connect!(:allow_localhost => true) 

И для интеграции тестов, я хотел бы сделать

WebMock.allow_net_connect! 

Кроме того, перед началом теста интеграции, я бы чтобы убедиться, что solr запущен. Поэтому я хочу позвонить

config.before(:suite) do 
    SunspotStarter.start 
end 

НО, только для испытаний на интеграцию. Я не хочу запускать свой solr, если это единичный тест.

Как сохранить свои конфигурации отдельно? Прямо сейчас, я решил это, сохранив тесты интеграции в папке вне папки spec, которая имеет свой собственный spec_helper. Есть ли лучший способ?

ответ

2

Мое решение может быть немного хакерским, но насколько я проверял, он должен работать.

Я заметил, что config.include принимает type аргумента, так что это может быть абами используется для выполнения произвольных блоков кода следующим образом:

module UnitTestSettings 
    def self.included(base) 
    WebMock.disable_net_connect!(:allow_localhost => true) 
    end 
end 

module IntegrationTestSettings 
    def self.included(base) 
    WebMock.allow_net_connect! 

    RSpec.configure do |config| 
     config.before(:suite) do 
     SunspotStarter.start 
     end 
    end 

    end 
end 

Rspec.configure do |config| 
    config.include UnitTestSettings, :type => :model 
    config.include IntegrationTestSettings, :type => :integration 
end 

Капля этого в файл в папке поддержки, и вы должны быть хорошо идти, хотя я на самом деле не проверял код. Кроме того, я уверен, что есть лучший способ добиться того же.

2

Вы можете указать тип блока до/после, так же, как и для оператора include. Таким образом, вы могли бы сделать следующее:

RSpec.configure do |config| 
    config.before(:each, type: :model) do 
    WebMock.disable_net_connect!(:allow_localhost => true) 
    end 

    config.before(:each, type: :request) do 
    WebMock.allow_net_connect! 
    end 

    config.before(:suite, type: :request) do 
    SunspotStarter.start 
    end 
end