rspec + webkit在第一次请求后丢失了会话/ cookie

时间:2015-09-28 07:48:04

标签: ruby-on-rails rspec webkit capybara capybara-webkit

使用带有默认驱动程序的rspec工作正常并且所有测试都通过了。

更改driver: :webkit会产生不良副作用。

  1. 步骤:用户已登录
  2. 步骤:使用会话(current_user)
  3. 访问root_path
  4. 步骤:访问没有会话的root_path (current_user = nil)
  5. 所以要么在第一个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
    

2 个答案:

答案 0 :(得分:1)

默认驱动程序同步运行所有内容---使用真实浏览器并支持javascript的驱动程序不一定同步执行任务 - 因此可以在除了机架测试之外的驱动程序中进行click_on'登录&# 39;马上回来因此,如果您没有检查成功时会看到的内容,则可以立即执行下一次访问root_path并取消登录表单的提交。要解决这个问题,请添加类似

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

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

如果这不是这里发生的事情,那么唯一可以记录用户的地方(给出您的示例代码)是您自己的应用

答案 1 :(得分:0)

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

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