gpt4 book ai didi

ruby-on-rails - 当测试自定义设计 Controller 时,得到一个@controller is nil Runtime :Error

转载 作者:数据小太阳 更新时间:2023-10-29 09:01:13 25 4
gpt4 key购买 nike

我已经使用控制台命令 rails generate devise:controllers users 为用户设计生成 Controller ,当我尝试为 registrations_controller.rb 运行一个简单测试时,我的控制台输出错误:

RuntimeError: @controller is nil: make sure you set it in your test's setup method.

我是设计新手,但一切似乎都非常简单,所以我真的不明白为什么这不起作用。

这是 app/controllers/users/registrations_controller.rb :

class RegistrationsController < Devise::RegistrationsController

# GET /resource/sign_up
def new
super
@user = User.new
end
end

这是 config/routes.rb :

Rails.application.routes.draw do
devise_for :users, controllers: { registrations: 'users/registrations'}
devise_scope :users do
root 'users/registrations#new'
get "sign_up", to: "users/registrations#new"
end
end

这是测试/ Controller /registrations_controller_test.rb

require 'test_helper'


class RegistrationsControllerTest < ActionController::TestCase
include Devise::TestHelpers


def setup
@user = users(:user1)
end

test "should get new" do
get :new
assert_response :success
end
end

非常感谢您提供的任何帮助!

最佳答案

根据 Devise 文档:“如果您正在测试 Devise 内部 Controller 或从 Devise 继承的 Controller ,您需要在请求之前告诉 Devise 应该使用哪个映射。” https://github.com/plataformatec/devise#test-helpers

class RegistrationsControllerTest < ActionController::TestCase
include Devise::TestHelpers

def setup
request.env['devise.mapping'] = Devise.mappings[:user]

@user = users(:user1)
end

test "should get new" do
get :new
assert_response :success
end
end

您可能还需要像这样为您的测试类添加前缀:

class Users::RegistrationsControllerTest < ActionController::TestCase
...
end

关于ruby-on-rails - 当测试自定义设计 Controller 时,得到一个@controller is nil Runtime :Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35218978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com