5

我正在尝试通过 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

结尾

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

有什么想法吗?

4

3 回答 3

7

在我的情况下,我需要添加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
于 2014-08-11T14:39:08.760 回答
6

这个 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”可能是您的问题。

于 2012-08-09T08:51:59.617 回答
1

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

于 2014-07-17T09:13:08.900 回答