Ruby on rails 当类位于子目录中并且是子类时,Rspec失败,load_缺少_常量

Ruby on rails 当类位于子目录中并且是子类时,Rspec失败,load_缺少_常量,ruby-on-rails,ruby-on-rails-3,rspec,Ruby On Rails,Ruby On Rails 3,Rspec,我在运行一系列RSpec测试时遇到了一些问题,因为我怀疑这与自动加载有关。以下是错误: /usr/share/ruby-rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.1.4/lib/active_support/dependencies.rb:490:in `load_missing_constant': Expected /var/lib/jenkins/.../portfolios/base_manage_controller.rb to def

我在运行一系列RSpec测试时遇到了一些问题,因为我怀疑这与自动加载有关。以下是错误:

/usr/share/ruby-rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.1.4/lib/active_support/dependencies.rb:490:in `load_missing_constant': Expected /var/lib/jenkins/.../portfolios/base_manage_controller.rb to define Portfolios::BaseManageController (LoadError)
from /usr/share/ruby-rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.1.4/lib/active_support/dependencies.rb:181:in `block in const_missing'
from /usr/share/ruby-rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.1.4/lib/active_support/dependencies.rb:179:in `each'
from /usr/share/ruby-rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.1.4/lib/active_support/dependencies.rb:179:in `const_missing'
from /usr/share/ruby-rvm/gems/ruby-1.9.2-p320@global/gems/rake-0.9.2.2/lib/rake/ext/module.rb:36:in `const_missing'
from /var/lib/jenkins/jobs/.../app/controllers/portfolios/customize_controller.rb:1:in `<top (required)>'
它生活在
app/controllers/portfolions/customize\u controller.rb

最后,这里是一组自动加载:

config.autoload_paths += Dir["#{config.root}/lib",  "#{config.root}/lib/**/"]
config.autoload_paths += %W(#{config.root}/app/models/statistics)

#Any test/dev specific load paths
if not Rails.env.production?
  config.autoload_paths += %W(#{config.root}/spec/support)
  config.autoload_paths += %W(#{config.root}/spec/support/builders)
  config.autoload_paths += %W(#{config.root}/spec/support/modules)
  config.autoload_paths += %W(#{config.root}/spec/support/utils)
end

任何帮助都将不胜感激

rspec
加载
portfolions::BaseManageController
时,似乎没有定义
portfolions
。您在哪里定义了
投资组合
?如果将其定义为单独文件中某个位置的模块或类,则需要首先
要求
此文件。

由于在/var/lib/jenkins/../portfolions/base\u manage\u controller.rb中存在同名文件,因此自动加载路径发生冲突


您需要修改加载路径,以便在列表中提前显示应用程序/控制器,或者重命名或删除在上述路径中指定的文件

以下解决方案将对您有所帮助

在以下路径中为app/controllers/portfolions/base\u manage\u controller.rb创建规范 spec/controllers/portfolio/base\u manage\u controller\u spec.rb

规范内容应该是这样的

describe Portfolios::BaseManageController do
 -----
end

您可以对app/controllers/portfolions/customize_controller.rb应用相同的逻辑。当定义类时引发异常时,有时会发生此错误。在这种情况下,尝试定义在base_manage_controller.rb中找到的类时可能会发生运行时错误

要验证这种情况,请尝试从
base\u manage\u controller.rb
中剥离除类声明之外的所有内容:

class Portfolios::BaseManageController < ApplicationController
end
class公文包::BaseManageController
这将导致规范运行,但失败


要查找运行时错误,请将所有内容放回类中,并通过调用
portfolions::BaseManageController
script/console
加载它。这将尝试动态加载类,并引发阻止定义类的异常。

在模块中定义类时,该异常是否有效?例如,
模块组合;类BaseManageController<应用程序控制器;结束;结束
no。还是因为同样的错误而失败我讨厌那些错误。。。您是否尝试过:
classportfolions::CustomizeController
它只是在RSpec中失败了,还是在开发中运行rails时也失败了?
describe Portfolios::BaseManageController do
 -----
end
class Portfolios::BaseManageController < ApplicationController
end