Как настроить интеграционные тесты, используя rspec 2? - PullRequest
0 голосов
/ 31 декабря 2010

Мне нужны разные настройки для моих юнит-тестов и разные настройки для моих интеграционных тестов.Пример

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

WebMock.disable_net_connect!(:allow_localhost => true)

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

WebMock.allow_net_connect!

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 21 мая 2012

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

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
2 голосов
/ 07 января 2011

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

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

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

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

...