如何在Capybara测试中使用Rspec验证Warden/Devise

Sch*_*ems 9 ruby rspec ruby-on-rails devise capybara

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

以前我可以使用authlogic通过使用如下代码来截断我的会话模型来做到这一点:

def login(user)
  user_session = mock_model(UserSession, {:user => user})
  UserSession.stub(:find).and_return(user_session)
end
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*sic 16

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

# features/support/warden.rb

Warden.test_mode!
World Warden::Test::Helpers
After { Warden.test_reset! }
Run Code Online (Sandbox Code Playgroud)

# 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
Run Code Online (Sandbox Code Playgroud)

使用Wardens.test_mode!与水豚

  • 我需要指定我当前的范围`login_as @current_user,:scope =>:user`感谢您的帮助 (2认同)