在test.rb中加载的变量在测试中找不到

时间:2011-03-12 18:44:11

标签: ruby-on-rails ruby rspec

我正在运行rspec 2.5.1,ruby 1.9.2和rails 3.0.5

我移动了一些设置,用于将邮件发送到我在environment.rb中加载的yaml文件中:

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

邮件程序类是这样的:

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

这在开发中效果很好,但是在运行任何测试之前,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 个答案:

答案 0 :(得分:2)

我经常明确地将常量定义为全局常量,以便在我想要区分时它们不是命名空间。这通常有助于澄清这些类型的问题。

::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文件中,而不是Rails 3中的environment.rb文件。