当需要env.rb中的文件时,如何摆脱已经初始化的常量警告?

时间:2013-03-19 11:51:44

标签: ruby cucumber

我需要features/support/env.rb中的一些文件作为:

['/helpers/*', '/pages/*', '/models/*'].each do |path|
  Dir[File.dirname(__FILE__) + path].each { |file| require file }
end

(我这样做,因为我想在运行任何测试之前创建测试用户和其他一些东西。)

但是看起来那些文件随后由Cucumber使用load加载,因为我收到了大量的警告,比如当Cucumber加载它们时:

/home/andrey/dev/project/features/support/models/my_class.rb:2: warning: already initialized constant MyClass::MY_CONSTANT
情景开始时

我怎样才能摆脱这些警告?

2 个答案:

答案 0 :(得分:1)

您可以将代码包装在silence_warnings块中:

silence_warnings do
  ['/helpers/*', '/pages/*', '/models/*'].each do |path|
    Dir[File.dirname(__FILE__) + path].each { |file| require file }
  end
end

对于你正在尝试做的任何事情,可能有一种更好的方式,以一种与你的测试框架相配的方式,但上面的代码应该处理你的直接问题。

答案 1 :(得分:0)

您可以在黄瓜之前设置帮助器和模型。钩子。

仅运行一次前挂钩的推荐方法是使用全局变量,所以:

Before do 
  if !$already_required
    ['/helpers/*', '/pages/*', '/models/*'].each do |path|
      Dir[File.dirname(__FILE__) + path].each { |file| require file }
    end
    $already_required = true 
  end 
end 

https://github.com/cucumber/cucumber/wiki/Hooks#running-a-before-hook-only-once