Переменная, загруженная в environment.rb, не найдена в тестах

Я использую rspec 2.5.1, ruby ​​1.9.2 и rails 3.0.5.

Я переместил некоторые свои настройки для отправки почты в файл yaml, который я загружаю в environment.rb:

APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")

Класс почтовой программы выглядит примерно так:

class Notifier < ActionMailer::Base
  default :from => APP_CONFIG['support_email']
  ...
end

Это отлично работает в dev, но rspec выкашливает комок шерсти перед запуском любых тестов:

/.../rspec/core/backward_compatibility.rb:20:in
  'const_missing': uninitialized constant Notifier::APP_CONFIG (NameError) 
    from /rspec/expectations/backward_compatibility.rb:6:in 'const_missing'     
    from /.../app/mailers/notifier.rb:2:in '<class:Notifier>'

Я не запускаю spork или что-то в этом роде, поэтому я подумал, что для запуска тестов нужно загрузить среду rails? Любая помощь в выяснении того, что я испортил, будет здорово.

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


person blu    schedule 12.03.2011    source источник


Ответы (1)


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

::APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")

class Notifier < ActionMailer::Base
  default :from => ::APP_CONFIG['support_email']
  ...
end

Возможно, вам также следует переместить это определение APP_CONFIG в файл application.rb вместо файла environment.rb в Rails 3.

person Pan Thomakos    schedule 12.03.2011