6

对于几乎每个集成测试,用户都必须登录到 Devise。这需要很多时间,所以我想知道是否有一种方法可以设置用户会话,而无需访问登录页面、输入详细信息并按下登录按钮。

也许 Devise 中内置了一个帮助方法,可以立即登录给定的用户?

非常感谢您的帮助。

4

1 回答 1

16

在您的规范文件的标题中,插入include Warden::Test::HelpersWarden.test_mode!,如下所示:

require 'spec_helper'

include Warden::Test::Helpers
Warden.test_mode!

describe "AuthenticationPages" do

let(:user) { FactoryGirl.create(:user) }

before { login_as(user, scope: :user }
...

在上面的代码中,我使用 FactoryGirl 创建一个用户。您可以使用其他您喜欢的方式来创建用户。user然后我使用方法登录login_as。然后你可以运行任何测试,你可以肯定user已经登录了。我想这就是你想要的,希望对你有帮助。您可以在此处查看更多详细信息Test with capybara

编辑

为了确保它正常工作,您需要在每次测试后重置守望者,您可以通过调用来执行此操作

Warden.test_reset! 

如果出于某种原因您需要注销已登录的测试用户,您可以使用 Warden 的注销助手。

logout(:user)
于 2012-11-01T10:25:46.607 回答