【问题标题】:Rspec tests fail in NamespaceRspec 测试在命名空间中失败
【发布时间】:2011-05-28 11:25:31
【问题描述】:

我刚刚将一些现有的 rails 测试转换为 rspec,现在命名空间中的测试失败了。

即在下面的示例中,AccountController 规范通过,而 ChildrenController 失败并出现以下错误:

in `load_missing_constant': Expected /.../app/controllers/admin/children_controller.rb to define Admin::ChildrenController (LoadError)

app/controllers/account_controller.rb

class AccountController < ApplicationController

spec/controllers/account_controller_spec.rb

require 'spec_helper'

describe AccountController do
  #...
end

app/controllers/admin/children_controller.rb

class Admin::ChildrenController < ApplicationController

spec/controllers/admin/children_controller_spec.rb

require 'spec_helper'

describe Admin::ChildrenController do  
   include ::ControllerHelper 
   #... 
end

我正在使用

  • ruby-1.9.2-p0
  • Rails 3.0.3
  • rspec 2.3.0

我尝试过使用命名空间定义,但到目前为止没有运气 - 有什么想法吗???

【问题讨论】:

    标签: ruby-on-rails ruby rspec rspec2


    【解决方案1】:

    发布答案,以防有人再次绊倒!

    最后我通过扁平化的规格来修复它,如下所示:

    app>controllers>admin>children_controller.rb
    class Admin::ChildrenController < ApplicationController
    
    spec>controllers>children_controller_spec.rb
    require 'spec_helper'
    describe Admin::ChildrenController do  
    

    【讨论】:

      【解决方案2】:

      您可以将控制器保存在单独的文件夹下,但您必须使用 需要 File.dirname(FILE) + '/../../spec_helper' 而不仅仅是需要'spec_helper'

      【讨论】:

        【解决方案3】:

        另一种解决方案:

        通过将类定义为字符串,它将正常加载:

        # children_controller_spec.rb
        require 'spec_helper'
        describe "Admin::ChildrenController" do  
          # -something-
        end
        

        这将在 spec/controller/admin 目录中工作

        编辑:在 2.10.x 中不起作用

        【讨论】:

          【解决方案4】:

          我有同样的问题,并且不愿意将测试放在较低的目录中。就我而言,是 Spork 把事情搞砸了。

          准确地说:

          Spork.each_run do
            ActiveSupport::Dependencies.clear
          end
          

          如果 spork 正在运行,我放置了一个检查器,否则你应该忽略这一行。

          Spork.each_run do
            if /spork/i =~ $0 || RSpec.configuration.drb?
              ActiveSupport::Dependencies.clear
            end
          end
          

          【讨论】:

          • 我在所有事情上都是最新的,RSpec.configuration.drb? 通过 spork 和 rspec w/o spork 回来了。所以我在 test.rb 中对 cache_classes 使用了相同的检查:if /spork/i =~ $0 || ENV['DRB'] == 'true'
          【解决方案5】:

          我遇到了同样的问题,通过以下方式解决了:

          之前:

          # app/controllers/admin/awards_controller.rb:
          class Admin::AwardsController < ApplicationController
          
          # spec/controllers/admin/awards_controller_spec.rb:
          require 'spec_helper'
          
          describe Admin::AwardsController do
          

          运行 rspec 给了我:

          /Users/andy/.rvm/gems/ruby-1.9.3-p385@xxxx/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:503:in `load_missing_constant': Expected /Volumes/untitled/xxxx/app/controllers/admin/awards_controller.rb to define Admin::AwardsController (LoadError)
          (stacktrace...)
          

          之后:

          # spec/controllers/admin/awards_controller_spec.rb:
          require 'spec_helper'
          load "#{Rails.root}/app/controllers/admin/awards_controller.rb"
          
          describe Admin::AwardsController do
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-03
            • 2018-09-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多