Rails 5.1/Devise 4.4 - 测试:Object:Class 的未定义方法“setup”(NoMethodError)

dev*_*jay 5 testing ruby-on-rails devise

使用 Rails 进行测试时,我遇到了“Object:Class (NoMethodError) 的未定义方法‘setup’”。运行任何测试时出现此错误。

我正在使用 Ruby on Rails 教程中的测试设置,另外在我的测试文件中包含了 Devise::Test::IntegrationHelpers(用于集成测试)和 Devise::Test::ControllerHelpers(用于控制器测试)。

这是我得到的错误:.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/devise4.4.3/lib/devise/test/controller_helpers.rb:30:in block in <module:ControllerHelpers>': undefined methodsetup' for Object :Class (NoMethodError)

这是错误所指的 controller_helpers 文件中的行:

module Devise
   module Test

      module ControllerHelpers
        extend ActiveSupport::Concern

        included do
           setup :setup_controller_for_warden, :warden
        end
         .
         .
         .
Run Code Online (Sandbox Code Playgroud)

这些是我的测试宝石:

group :test do
   gem 'rails-controller-testing', '1.0.2'
   gem 'minitest-reporters',       '1.1.14'
   gem 'guard',                    '2.13.0'
   gem 'guard-minitest',           '2.4.4'
end
Run Code Online (Sandbox Code Playgroud)

这是我的 test_helper.rb 文件:

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require "minitest/reporters"
Minitest::Reporters.use!

class ActiveSupport::TestCase
    fixtures :all 
end
Run Code Online (Sandbox Code Playgroud)

这是我的测试之一:

require 'test_helper'

class UsersControllerTest < ActionController::TestCase
  include Devise::Test::ControllerHelpers

 setup do
    @user = users(:one)
 end

 test "should get index" do
    get users_url
    assert_response :success
 end

 test "should get new" do
   get new_user_url
   assert_response :success
 end
  .
  .
  .
end
Run Code Online (Sandbox Code Playgroud)

任何有关此问题的帮助将不胜感激。谢谢你。