RSpec 设计会话测试
RSpec Devise Session Testing
使用 rails 4.2.0 和最新版本 RSpec 我生成了一个控制器测试。
我如何确保我的管理员用户已登录?
例如:如果current_user.admin?
在 rspec 测试中,它是这样提到的:
let(:valid_session) { {} }
如何进入有效会话?
首先您需要在 spec_helper
文件中添加设计助手以便在测试中可以访问,as mentioned in the wiki
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
end
然后在控制器中,您可以轻松地创建一个用户对象并使用 sign_in
辅助方法
登录
第 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
如果您不想担心 session/login/signup 问题,它们将非常有用。
您可以在此处查看他们的文档:
plataformatec/devise
wardencommunity/warden
此答案是根据设计文档编写的:
devise-wiki-how-to-test
使用 rails 4.2.0 和最新版本 RSpec 我生成了一个控制器测试。
我如何确保我的管理员用户已登录?
例如:如果current_user.admin?
在 rspec 测试中,它是这样提到的:
let(:valid_session) { {} }
如何进入有效会话?
首先您需要在 spec_helper
文件中添加设计助手以便在测试中可以访问,as mentioned in the wiki
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
end
然后在控制器中,您可以轻松地创建一个用户对象并使用 sign_in
辅助方法
第 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
如果您不想担心 session/login/signup 问题,它们将非常有用。
您可以在此处查看他们的文档: plataformatec/devise wardencommunity/warden
此答案是根据设计文档编写的: devise-wiki-how-to-test