繁体   English   中英

RSpec 设计会话测试

[英]RSpec Devise Session Testing

使用 rails 4.2.0 和最新版本的 RSpec,我生成了一个控制器测试。

我如何确保我的管理员用户已登录?

例如:如果 current_user.admin?

在 rspec 测试中,它像这样提到它:

let(:valid_session) { {} }

我将如何进入有效的会话?

首先,您需要在spec_helper文件中添加设计助手以便在测试中访问, 如维基中所述

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end

然后在控制器中,您可以轻松地创建一个用户对象并使用sign_in helper 方法将其登录

第 1 步:您可以在 spec 文件夹中创建类似以下的自定义方法,然后简单地使用它们(在您完成@Mohammad AbuShady 的回答所述之后,通常在 rspec 中默认完成)

module ControllerMacros
  def login_admin
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:admin]
      sign_in FactoryBot.create(:user, admin:true)
    end
  end

  def login_user
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      sign_in FactoryBot.create(:user)
    end
  end
end

第2步:

login_userlogin_admin添加到您需要更改的规范文件中

let(:valid_session) { {} }

let(:valid_session) { {"warden.user.user.key" => session["warden.user.user.key"]} }

如果您不想担心会话/登录/注册问题,我希望您正在使用devisewarden ,它们非常有用。

您可以在此处查看他们的文档: plataformatec/ devise wardencommunity/warden

这个答案是根据设计文档编写的: devise-wiki-how-to-test

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM