Переменная, загруженная в environment.rb, не найдена в тестах - PullRequest
1 голос
/ 12 марта 2011

Я использую 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? Любая помощь в выяснении того, что я испортила, была бы великолепна.

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

1 Ответ

2 голосов
/ 12 марта 2011

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

::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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...