[英]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_user
或login_admin
添加到您需要更改的规范文件中
let(:valid_session) { {} }
到
let(:valid_session) { {"warden.user.user.key" => session["warden.user.user.key"]} }
如果您不想担心会话/登录/注册问题,我希望您正在使用devise
和warden
,它们非常有用。
您可以在此处查看他们的文档: plataformatec/ devise wardencommunity/warden
这个答案是根据设计文档编写的: devise-wiki-how-to-test
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.