Bra*_*don 5 rspec ruby-on-rails constants spork
我正在使用以下技巧(来自http://mikbe.tk/2011/02/10/blazingly-fast-tests/)来确保模型在使用Spork的每个RSpec运行时重新加载:
Spork.each_run do
load "#{Rails.root}/config/routes.rb"
Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f }
# .....
end
Run Code Online (Sandbox Code Playgroud)
但是,每次运行测试时都会出现以下警告:
/myproject/app/models/model.rb:36: warning: already initialized constant CONFIGURABLE
我可以通过以下方式避免:
if !defined?(A_CONSTANT)
在每个常数之后,这看起来并不正确(但它确实有效).有关如何使其正常工作的任何建议?(即我的模型仍将在测试中重新加载,但我不必将if每个常量定义放在后面.)
使用“load”将导致文件被重新加载,这意味着如果该文件定义了常量,则每次加载时都会重新定义这些常量。通常首选使用“require”而不是加载,因为它可以通过在文件已加载时不重新加载文件来避免此问题。
但是,显然您确实希望在测试环境中重新加载文件,因此您可以在加载时抑制警告:
Spork.each_run do
Kernel.silence_warnings do
load "#{Rails.root}/config/routes.rb"
Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f }
# .....
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |