如何在与Capybara签到路径后测试设计

时间:2015-08-01 23:53:25

标签: ruby-on-rails capybara

我正在尝试测试通过Devise gem登录后会发生什么。例如,我让控制器在用户成功登录后转到student_dashboard_path。

我如何使用Capybara和Rspec进行测试?

我目前有这个:

/spec/features/user_signs_in_sees_dashboard_spec.rb

require 'rails_helper'

feature 'User sign in' do
  scenario 'successfully from sign in page and sees student dashboard' do
     sign_in
     visit student_dashboard_path
     expect(current_path).to eq(student_dashboard_path)
  end
end

我有这个:

/spec/support/features/sign_in.rb

module Features
  def sign_in
    visit user_session_path
    fill_in 'Email', with: User.first.email
    fill_in 'Password', with: User.first.password
    click_button 'Log in'
  end
end

我收到此错误消息:

  1) User signs in successfully from sign in and sees dashboard
 Failure/Error: expect(current_path).to eq(student_dashboard_path)

   expected: "/student/dashboard"
        got: "/student/login"

我不确定为什么我无法登录并查看学生信息中心。

2 个答案:

答案 0 :(得分:1)

对于仍在Capybara上的人,我将在下面留下原来的答案。 2.5.0但在2.5.0中你现在可以做到

expect(page).to have_current_path(<expected path>)

它会在检查路径时使用Capybara的等待行为

----以下仅适用于Capybara版本&lt; 2.5.0

expect(current_path).to eq(...)不等待路径改变,它只是比较它被调用时的当前路径。如果您在点击按钮后进入睡眠我打赌它有效。更好的解决方案是拥有像

这样的东西
expect(page).to have_text('You are now logged in')

在click_button之后。这会导致capybara等到登录完成,页面加载(并显示登录通知),因此直到current_path也发生了变化。

答案 1 :(得分:0)

在中间使用capybara save_and_open_page来判断字段是否设置正确。如果您在同一台计算机上工作,可以切换到 selenium 以在真实浏览器上进行测试。

另外请确保此代码不需要任何JS工作,因为默认的capybara匹配器将无法运行它。