rspec + webkit 在第一次请求后丢失 session/cookie

rspec + webkit is losing session/cookie after first request

使用 rspec 和默认驱动程序工作正常,所有测试都通过了。

改变driver: :webkit会有不好的副作用。

  1. 步骤:用户已登录
  2. 步骤:访问 root_path 会话 (current_user)
  3. 步骤:访问 root_path 没有会话 (current_user = nil)

因此,无论是在第一个 visit root_path 之后还是在第二个之前,会话都会被终止或发生其他情况 - 我们无法让用户保持登录状态。

测试看起来像这样

scenario 'something', driver: :webkit do
  user = FactoryGirl.create :user
  login_as(user)
  visit root_path
  visit root_path
end

这是已知错误吗?是否有任何解决方法或者我们是否遗漏了什么?


根据要求:

 def login_as(user)
    visit root_path
    click_on "Login"
    fill_in "user[login]", with: user.username
    fill_in "user[password]", with: user.password
    click_on "Sign in"
  end

如果您是在第一次访问后删除会话,则预计用户会注销。

没有会话访问是否意味着匿名访问该页面?

默认驱动程序同步运行所有内容 --- 使用真实浏览器并支持 javascript 的驱动程序不一定同步执行操作 - 因此在 click_on 的机架测试以外的驱动程序中是可能的 'Sign in' 到 return 立即。因此,如果您不检查成功后会看到的内容,则下次访问 root_path 可以立即执行并取消提交登录表单。要解决此问题,请添加类似

的内容
expect(page).to have_content('You are now logged in') # whatever text is shown on a successful login

作为 login_as 方法的最后一行。这对大多数人来说通常不是问题,因为登录后下一步通常是点击页面上的某个东西,这会让 Capybara 等待该项目出现,从而等待登录完成。

如果这不是这里发生的情况,那么唯一可以将用户注销的地方(给定您的示例代码)是您自己的应用程序