【问题标题】:Testing with RSpec in RoR application - uninitialized constant在 RoR 应用程序中使用 RSpec 进行测试 - 未初始化的常量
【发布时间】:2012-08-09 08:03:07
【问题描述】:

我正在尝试通过 RSpec 测试我的 Rails 3.2.3 应用程序。它已安装(我已经测试了另一个应用程序并且运行良好)但它在 Gemfile 中不存在。这是spec/application_controller_spec.rb的代码

    require "rspec"
    require_relative "../app/controllers/application_controller"

    describe ApplicationController do
      it "current_cart does something" do
        #app_controller  = ApplicationController.new
        pending
      end
    end

以下命令返回错误:

alex@ubuntu:~/RubymineProjects/psg$ rspec spec
/home/alex/RubymineProjects/psg/app/controllers/application_controller.rb:1:in `<top (required)>': uninitialized constant ActionController (NameError)
    from /home/alex/RubymineProjects/psg/spec/application_controller_spec.rb:2:in `require_relative'
    from /home/alex/RubymineProjects/psg/spec/application_controller_spec.rb:2:in `<top (required)>'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `block in load_spec_files'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `map'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:22:in `run'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:69:in `run'
    from /home/alex/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:8:in `block in autorun'

文件 ApplicationController.rb

 class ApplicationController < ActionController::Base
   def some_action
     #............
   end

结束

即使我在 Gemfile 中添加 gem 'rspec' 也不会改变任何内容,错误仍然存​​在。

有什么想法吗?

【问题讨论】:

标签: ruby-on-rails rspec


【解决方案1】:

就我而言,我需要将rails_helper 添加到规范文件或.rspec 文件中。

require 'spec_helper'
require 'rails_helper'

describe SomeController do
end

# Or in the .rspec file:
--color
--require spec_helper
--require rails_helper

【讨论】:

    【解决方案2】:

    这个 require_relative 在那里做什么?我使用 rspec 并且不需要这个。实际上,我的规范文件中唯一的要求是:

    require 'spec_helper'
    

    (至少在大多数情况下,有一些文件需要特殊的东西,比如“authlogic/test_case”)

    我的 rspec 的 Gemfile 条目如下所示:

    group :development do
      gem 'rspec-rails'
    end
    
    group :test do
      gem 'rspec-rails'
      gem 'spork', '0.9.0.rc8'
    end
    

    如果你不使用 spork,你当然不需要它,但也许“rspec-rails”而不是“rspec”可能是你的问题。

    【讨论】:

    • 错误是require: cannot load such file -- spec_helper (LoadError)
    • 您是否运行过“rails generate rspec:install”?该文件是否存在于 spec 文件夹中?
    • 接受我的回答是否意味着它有帮助?或者它仍然没有运行? (问题:该文件是否存在于 spec 文件夹中?是关于 spec_helper 文件。如果不存在,那么 rspec 设置在基本级别上出现问题)
    • 您的答案正是我想要的。现在它运行良好。
    【解决方案3】:

    我遇到了同样的问题,解决的方法是确保规范文件的名称与控制器文件的名称完全相同。所以没有controller_name_controller_spec.rb,只有controller_name_controller.rb。

    【讨论】:

    • 错了,如果你删除'spec'后缀,测试将不会执行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多