2016-04-18 3 views
1

Я использую по умолчанию test для разных целей, и я решил создать определенную конфигурацию среды для запуска набора тестов.Rspec - где дополнительная конфигурация для тестовой среды?

Однако, я обнаружил, что при переходе к ENV["RAILS_ENV"] ||= rspec в моем rails_helper.rb файл, вдруг много вещей происходит не так, константы не загружаются (FactoryGirl, DatabaseCleaner и т.д. бросить uninitialized constant ошибки)

Мой вопрос , где код, который загружает этих ребят в тестовую среду? Поскольку я планирую использовать этот этап для других целей, кроме запуска автоматических тестов, я боюсь, что добавленная конфигурация «из ниоткуда» может не сработать с тем, что я планирую делать.

ответ

1

Если вы получаете uninitialized constant ошибки для FactoryGirl, DatabaseCleaner и т. Д., Вы, скорее всего, включили их в группу test в свой Gemfile.

Вы должны переместить их в rspec группе, например:

# Gemfile 

group :rspec do 
    gem 'factory_girl_rails', '~> 4.0' 
    gem 'faker' 
end 
+0

Aaaah * похлопывание лоб *, конечно! –

1

С точки зрения Rails, тестовая среда настроена и загружена, как и любой другой среде, такой как production или development. Вы можете увидеть это префикс RAILS_ENV=test для многих собственных команд Rails, например. RAILS_ENV=test rails c загрузит консоль рельсов для тестовой среды и т. Д. Аналогично, вся тестовая конфигурация в Rails определена в test.rb в вашей папке config/environments.

Однако, когда вы запустите спецификации с rspec spec, вы на самом деле начинаете бегун RSpec, который, для большинства намерений и целей, работает независимо от Rails (даже с rspec-rails драгоценным камнем).

По соглашению, когда RSpec запускает первое, что он делает, читается командная строка args из .rspec в текущем каталоге, если она существует. Затем он запускает spec_helper.rb (а также rails_helper.rb для rspec-rails 3+). Это на самом деле spec_helper.rb, который делает всю тяжелую-лифтинг при загрузке среды Rails для испытаний, а также с любым из модулей, которые вы используете в тестах, таких как DatabaseCleaner, FactoryGirl и т.д.

Если вам интересно, как RSpec подключается к Rails, основная часть его выполняется в этой строке, которая загружает Rails.

require File.expand_path('../../config/environment', __FILE__) 

Теперь, что касается вашего вопроса, без ENV['RAILS_ENV'] ||= 'test' заявления, выше линия будет загружать Rails в среде по умолчанию (разработка), который является не то, что вы хотите, так как любые драгоценные камни не в :test группы будут не загружается, а environments/test.rb не загружается.

TL; DR Тестовая конфигурация

обрабатывается двумя файлами: spec/spec_helper.rb (иногда называемый rails_helper.rb) и config/environments/test.rb. Первая конфигурирует RSpec и любые объекты и модули, которые будут использоваться специально в файлах, используемых в spec, последняя конфигурирует ваше приложение Rails.Опускание ENV['RAILS_ENV'] ||= test загружает среду разработки и gemset вместо тестовой среды и gemset, поэтому вы получаете массу ошибок.

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