gpt4 book ai didi

ruby-on-rails - 覆盖设备注册 Controller 时如何编写 Controller 测试?

转载 作者:行者123 更新时间:2023-12-03 09:07:46 26 4
gpt4 key购买 nike

我希望重写Devise::RegistrationsController来实现一些自定义功能。为此,我创建了一个新的RegistrationsController,如下所示:

# /app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def new
super
end
end

并像这样设置我的路线:
devise_for :users, :controllers => { :registrations => "registrations" }

并尝试像这样测试它:
describe RegistrationsController do
describe "GET 'new'" do
it "should be successful" do
get :new
response.should be_success
end
end
end

但这给了我一个错误:
 1) RegistrationsController GET 'new' should be successful
Failure/Error: get :new
AbstractController::ActionNotFound:
Could not find devise mapping for path "/users/sign_up".
Maybe you forgot to wrap your route inside the scope block? For example:

devise_scope :user do
match "/some/route" => "some_devise_controller"
end
# ./spec/controllers/registrations_controller_spec.rb:13:in `block (3 levels) in <top (required)>'

那我在做什么错?

最佳答案

问题在于Devise无法将路由从测试映射回原始 Controller 。这意味着,如果您在浏览器中打开应用程序实际上可以正常运行,则 Controller 测试仍将失败。

解决方案是在每次测试之前将devise映射添加到请求,如下所示:

before :each do
request.env['devise.mapping'] = Devise.mappings[:user]
end

关于ruby-on-rails - 覆盖设备注册 Controller 时如何编写 Controller 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6659555/

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