在Rspec中未经初始化的常数

时间:2013-09-05 06:12:57

标签: ruby-on-rails ruby rspec

我创建了一个常量,其中包含我正在处理的应用的API密钥。它在rails控制台中工作,但我很难在测试中使用它。我必须使用Bing所以我添加了这样的API:

# config/bing.yml
development:
  secret: 1234

test:
  secret: 5678

production:
  secret: abcd

# config/initializers/bing.rb
BING_CONFIG = YAML.load_file("#{::Rails.root}/config/bing.yml")[::Rails.env]

我如何确保BING_CONFIG加载到rspec?目前,它在我的rails控制台中正常工作和加载,但是当我运行我的规范时,我收到以下错误:

uninitialized constant SearchEngine::BING_CONFIG

2 个答案:

答案 0 :(得分:0)

BING_CONFIG = …字符串是否位于您的班级/模块SearchEngine中?如果是,请尝试

require 'search_engine'
rspec文件的顶部

(或如何调用包含该类的文件)。如果不是,请修复名称空间的问题,例如:

SearchEngine::BING_CONFIG = …

答案 1 :(得分:0)

据我所知,只要在config/initializers中配置这样的初始化,即使在rspec运行中也应该加载它。但它仍然没有用......

由于您的错误输出显示SearchEngine名称,我猜您已将初始化程序包装在模块中。

如果是这种情况,则应在上述分配之前引入SearchEngine模块名称。但是当您引入模块名称时,为了使Rails的自动加载器满意,您必须遵循Rails根据命名空间层次结构命名文件(和类/模块名称)的方式。这取决于SearchEngine的定义方式。您想如何定义模块名称?