NoMethodError:RSpec :: ExampleGroups :: ApplicationsController:Class的未定义方法`setup'

时间:2018-03-27 11:59:35

标签: ruby-on-rails rspec-rails

搜索此问题只会导致其他人处理的特定宝石或类的问题。就我而言,我认为一般来说rspec有问题。

每当我使用rails generate ControllerName生成一个控制器时,它会设置所有内容并且事情似乎正常。我已经开发了一些控制器并在开发和生产中进行了测试,一切正常。

唯一似乎被打破的是用rspec测试它们。现在我的项目中有两个控制器,每当我运行rspec / spec时,rails g生成的大多数规范都会出现这个错误:

NoMethodError:
  undefined method `setup' for RSpec::ExampleGroups::MoreStuffHere

例如,我有一个WelcomeController和ApplicationsController,这些是我不断得到的错误:

undefined method `setup' for RSpec::ExampleGroups::ApplicationsController:Class
undefined method `setup' for RSpec::ExampleGroups::WelcomeController:Class
undefined method `setup' for RSpec::ExampleGroups::WelcomeAboutHtmlErb:Class
undefined method `setup' for RSpec::ExampleGroups::WelcomeIndexHtmlErb:Class

有趣的是,我的helper_spec

没有错误

如果有帮助,这是一个完整的错误:

An error occurred while loading ./spec/controllers/applications_controller_spec.rb.

Failure/Error:
  RSpec.describe ApplicationsController, type: :controller do

  end

NoMethodError:
  undefined method `setup' for RSpec::ExampleGroups::ApplicationsController:Class
# ./spec/controllers/applications_controller_spec.rb:3:in `<top (required)>'

有谁知道这个问题可能在哪里?

2 个答案:

答案 0 :(得分:0)

spec_helper.rb我有

require File.expand_path("../../config/environment", __FILE__)
require 'rails/all'

RSpec.configure do |config|
  # More code here.
end

我所要做的就是在require 'rspec/rails'下添加require 'rails/all'。这解决了我的问题。

然而,我不知道为什么。如果有人可以详细说明这将是伟大的。我require 'rspec/rails'已经rails_herlper.rb,但显然不够好。

答案 1 :(得分:0)

恕我直言,这里的解决方案有点像达米安·里瓦斯(Damian Rivas)在那所说的,但重要的是:

  • 在rails助手中,您有一行:

require 'spec_helper'

  • 在spec_helper中,您在配置块行中包含设计助手:

config.include Devise::Test::ControllerHelpers, type: :controller

  • 您还如上所述,必须rspec/rails要求输入行

主要要点是,您必须在此处查看订单...始终包括rspec/rails,必须先于spec_helper

所以可以说示例spec_helper.rb如下:

require 'rubygems'

Rspec.configure do |config|
  config.include Devise::Test::ControllerHelpers, type: :controller
end

然后我们的rails_hepler.rb必须看起来像:

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
abort('The Rails environment is running in production mode!') if Rails.env.production?

require 'rspec/rails'
require 'spec_helper'

然后在sample_spec.rb中,您需要rails_helper,或者就我而言,我需要通过.rspec,所以我不必在每个规范中都放它。

希望对别人有帮助:)