我正在尝试编写一个测试,确保未经身份验证的用户无法访问某个页面。这是我的规范
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
非常感谢任何帮助。
答案 0 :(得分:0)
我不知道它是否会有所帮助,但我在登录后尝试对设计重定向进行功能测试时遇到了类似的问题。这些都是重点:
Devise::SessionsController
(不是例如UsersController)或写test Devise::SessionsController
重定向的示例测试可能如下所示:
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
是预期登录后的重定向路径。这不是完全登录测试,而是测试登录用户登录页面的重定向(确切地说)。