【发布时间】:2015-11-15 07:35:45
【问题描述】:
我在一个使用 Devise 和 Rspec 的 Rails 应用程序中编写了一些控制器测试。在this guide 之后,我在/spec/support/ 目录中创建了一个controller_macros.rb。同目录下还有一个devise.rb文件,里面有:
RSpec.configure do |config|
config.include Devise::TestHelpers, type: :controller
config.extend ControllerMacros, :type => :controller
end
spec_helper.rb 文件中需要这两个文件,使用以下行:
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
现在奇怪的是:这种方法在 OS X 笔记本电脑上运行良好,但在我的 Linux 桌面上却失败了。它们都使用相同的 RVM 设置、相同的 gemset、相同的一切。
我在 Linux 中运行测试时遇到的错误是:
uninitialized constant ControllerMacros (NameError)
显然controller_macros.rb 模块无法在 Linux 中加载。我看到 SO 的答案表明 config.extend 可以更改为 config.include,但这并不能解决问题。
有什么想法可以查看或可以测试什么来帮助隔离问题?
我使用的是 Rails 4.1.8 和 Rspec 3.1.7。
【问题讨论】:
-
发现使用
config.autoload_paths += %W(#{config.root}/spec/support)显式自动加载 application.rb 中的路径可以解决问题 - 但我很想知道为什么一台机器需要这个,而另一台不需要。 -
在带有 Rails 4.2 和 Rspec 3.2.0 的 Mac OS X 上得到这个
标签: ruby-on-rails rspec devise