使用rails 4.2.0和最新版本的RSpec,我生成了一个控制器测试。
我如何确保我的管理员用户已登录?
例如:if current_user.admin?
在rspec测试中,它提到了它:
let(:valid_session) { {} }
我如何进入有效会话?
答案 0 :(得分:4)
首先,您需要在spec_helper
文件中添加设计助手,以便在测试中可以访问as mentioned in the wiki
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
end
然后在控制器中,您可以轻松创建用户对象并使用sign_in
辅助方法对其进行签名
答案 1 :(得分:0)
步骤1: 您可以在spec文件夹中创建类似以下的自定义方法,然后简单地使用它们(完成@Mohammad AbuShady的回答状态后,通常在rspec中默认情况下完成此操作)
next(x for x in l if sub in x)
第2步:
在需要和更改的地方,将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
或login_user
添加到规范文件中
login_admin
到
let(:valid_session) { {} }
我希望您使用let(:valid_session) { {"warden.user.user.key" => session["warden.user.user.key"]} }
和devise
,如果您不想担心会话/登录/注册问题,它们将非常有用。
您可以在此处查看其文档: plataformatec/devise wardencommunity/warden
此答案是根据devise的文档编写的: devise-wiki-how-to-test