gpt4 book ai didi

ruby-on-rails - Devise 和 Rspec - 为未经身份验证的用户测试重定向时 Controller 测试出错

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:18 24 4
gpt4 key购买 nike

我正在尝试编写一个测试,以确保未经身份验证的用户无法访问特定页面。这是我的规范

   it "redirects to the sign in page for unauthenticated users" do
bob = Fabricate(:user)
sign_out bob
carolina_skiff = Fabricate(:boat_brand)
get :edit, id: carolina_skiff.id
expect(response).to redirect_to new_user_session_path
end

当我运行它时,我得到了这个错误。

Failure/Error: get :edit, id: carolina_skiff.id
ArgumentError:
uncaught throw :warden

我好像无法注销用户。我有另一个规范,我正在登录一个用户并且那个工作正常。

   it "sets the @boat_brand" do
bob = Fabricate(:user)
sign_in bob
carolina_skiff = Fabricate(:boat_brand)
get :edit, id: carolina_skiff.id
expect(assigns(:boat_brand)).to eq(carolina_skiff)
end

如有任何帮助,我们将不胜感激。

最佳答案

我不知道它是否有帮助,但我在登录后尝试对设计重定向进行功能测试时遇到了类似的问题。这些是重点:

  1. 准确测试 Devise::SessionsController(不是例如 UsersController)或编写 test Devise::SessionsController
  2. 强制正确映射,如文档中所述:https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-(and-RSpec)
  3. 包括 Devise::TestHelpers

带有重定向的示例测试如下所示:

require "test_helper"

describe 'Devise::SessionsControllerTest' do
# If you want different name in describe block write:
# tests Devise::SessionsController

include Devise::TestHelpers

test "should redirect to page_x after logged in" do
@request.env["devise.mapping"] = Devise.mappings[:user]
user = users :user
sign_in user
get :new
assert_redirected_to orders_path
end
end

其中 :user 只是常规有效的设计用户,而 orders_path 是登录后的重定向路径。这不是准确的登录测试,而是重定向测试来自已登录用户的登录页面(准确地说)。

关于ruby-on-rails - Devise 和 Rspec - 为未经身份验证的用户测试重定向时 Controller 测试出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26180375/

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