Запустите rspec блок "before" до запуска инициализаторов rails - PullRequest
4 голосов
/ 26 сентября 2011

Я бы хотел запустить блок rspec before, чтобы установить некоторые вещи до инициализации Rails, чтобы я мог проверить, что должен делать инициализатор.Возможно ли это?

1 Ответ

2 голосов
/ 11 сентября 2012

Если логика в ваших инициализаторах достаточно сложна, ее следует протестировать, вы должны извлечь ее в помощник, который можно изолировать и тестировать, не находясь в контексте инициализатора.

complex_initializer.rb

config.database.foo = calculate_hard_stuff()
config.database.bar = other_stuff()

Вы можете извлечь это в тестируемый помощник (lib / config / database.rb)

module Config::DatabaseHelper
  def self.generate_config
    {:foo => calculate_hard_stuff, :bar => other_stuff)
  end

  def calculate_hard_stuff
    # Hard stuff here
  end
end

... затем просто подключите данные конфигурации в инициализаторе

db_config_values = Config::DatabaseHelper.generate_config
config.database.foo = db_config_values[:foo]
config.database.bar = db_config_values[:bar]

... и проверить определение / расчет сложной конфигурации в отдельном тесте, в котором можно изолировать входы.

describe Config::DatabaseHelper do
  describe '.calculate_hard_stuff' do
    SystemValue.stubs(:config => value)
    Config::DatabaseHelper.calculate_hard_stuff.should == expected_value
  end
end
...