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

标签 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. 准确测试 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/

相关文章:

ruby-on-rails - 将图像从本地机器上传到 ruby​​ on rails 应用程序的 curl 请求

ruby-on-rails - 使用 Capybara 检查输入字段是否存在

ruby-on-rails - 无法通过 Post 在 Rspec 中创建模型

ruby-on-rails - 如何使ElasticSearch Client在整个应用程序中可用?

ruby - 无法再运行 rspec

ruby-on-rails - 在多台服务器上部署 Ruby on Rails 应用程序

生产环境中缺少 javascript_include_tag 文件 ( 404 )

javascript - fade_in fade_out 调用另一个页面

ruby-on-rails - 未初始化的常量 Twitter::OAuth - 忽略某个地方的需求?

ruby-on-rails - 在 Ruby 中覆盖 To_Json