如何在Capybara测试中使用Rspec确定Warden / Devise

我想在我的Rails应用程序中使用Capybara测试套件中的rspec模拟存根登录用户(使用Devise / Warden)。 这将节省大量时间,并且意味着我的测试套件可以/将定期运行。

以前我可以使用authlogic来执行此操作,方法是使用以下代码来截断我的会话模型:

def login(user) user_session = mock_model(UserSession, {:user => user}) UserSession.stub(:find).and_return(user_session) end 

现在我正在使用Devise,我再也无法访问UserSession对象了。 因为我使用capybara来测试我的代码,所以我没有直接访问请求对象来使用sign_in内置的sign_in测试助手。

我的问题是:如何使用水豚,设计和规范模拟模拟登录用户,而不需要每个具有登录用户的方案首先进入注册路径,填写表单,提交,等待响应,以及然后转到所需的页面?

Warden带有内置测试助手。 它允许您登录而无需在黄瓜测试中使用UI。 只需将以下文件添加到项目中即可。

# features/support/warden.rb

 Warden.test_mode! World Warden::Test::Helpers After { Warden.test_reset! } 

# features/step_definitions/user_steps.rb

 Given /^I am logged in as a user$/ do @current_user = User.create!(:username => 'user', :password => 'password') login_as(@current_user, :scope => :user) end 

使用Wardens.test_mode! 与Capybara