Capybara,RSpec和Devise:通过绕过慢速登录和直接设置会话,可以更快地进行集成测试吗?

Jos*_*eim 6 rspec ruby-on-rails devise capybara

对于几乎每个集成测试,用户都必须登录到Devise.这需要花费很多时间,所以我想知道是否有办法设置用户会话而无需访问登录页面,输入详细信息,然后按登录按钮.

也许在Devise中内置了一个帮助方法,可以立即在给定用户签名?

非常感谢您的帮助.

Tha*_*anh 16

在spec文件的标题中,插入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 }
...
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我使用FactoryGirl来创建用户.您可以使用其他方式来创建用户.然后我user使用方法登录login_as.然后你可以运行任何测试,你可以确定user已经插入.我认为这是你想要的,希望这个帮助.你可以在这里看到更多细节测试与水豚.

编辑

为确保此方法正常工作,您需要在每次测试后重置warden,方法是调用

Warden.test_reset! 
Run Code Online (Sandbox Code Playgroud)

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

logout(:user)
Run Code Online (Sandbox Code Playgroud)