RSpec设计会话测试

时间:2015-02-14 20:13:21

标签: ruby-on-rails ruby rspec devise rspec-rails

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

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

例如:if current_user.admin?

在rspec测试中,它提到了它:

let(:valid_session) { {} }

我如何进入有效会话?

2 个答案:

答案 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