Devise和Rspec - 测试未经身份验证的用户的重定向时控制器测试中的错误

时间:2014-10-03 13:58:34

标签: ruby-on-rails ruby rspec devise

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

   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 个答案:

答案 0 :(得分:0)

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

  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. 中的说明强制进行正确的映射
  4. 包括Devise :: TestHelpers
  5. 重定向的示例测试可能如下所示:

    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是预期登录后的重定向路径。这不是完全登录测试,而是测试登录用户登录页面的重定向(确切地说)。