【问题标题】:Maintaining Session with Capybara and Rails 3使用 Capybara 和 Rails 3 维护会话
【发布时间】:2011-01-19 17:59:26
【问题描述】:

我有两个 capybara 测试,第一个是登录用户,第二个旨在测试仅对登录用户可用的功能。

但是,我无法让第二个测试正常工作,因为会话没有跨测试维护(显然,它应该是)。

require 'integration_test_helper'

class SignupTest < ActionController::IntegrationTest

  test 'sign up' do  
    visit '/'
    click_link 'Sign Up!'
    fill_in 'Email', :with => 'bob@wagonlabs.com'
    click_button 'Sign up'
    assert page.has_content?("Password can't be blank")
    fill_in 'Email', :with => 'bob@wagonlabs.com'
    fill_in 'Password', :with => 'password'
    fill_in 'Password confirmation', :with => 'password'
    click_button 'Sign up'
    assert page.has_content?("You have signed up successfully.")
  end

  test 'create a product' do
    visit '/admin'
    save_and_open_page
  end

end

save_and_open_page 调用生成的页面是全局登录屏幕,而不是我所期望的管理主页(注册会登录)。我在这里做错了什么?

【问题讨论】:

    标签: ruby-on-rails integration-testing capybara


    【解决方案1】:

    发生这种情况的原因是测试是事务性的,因此您会在测试之间丢失状态。要解决这个问题,您需要在函数中复制登录功能,然后再次调用它:

    定义登录 访问 '/' fill_in '电子邮件', :with => 'bob@wagonlabs.com' fill_in '密码', :with => '密码' fill_in '密码确认', :with => '密码' click_button '注册' 结尾 测试“注册”做 ... 登录 assert page.has_content?("您已注册成功。") 结尾 测试“创建产品”做 登录 访问“/管理员” save_and_open_page 结尾

    【讨论】:

      【解决方案2】:

      每个测试都在干净的环境中运行。如果您希望执行常见的设置和拆卸任务,请按照Rails guides 中的说明定义setupteardown 方法。

      【讨论】:

        猜你喜欢
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        • 2013-06-05
        • 2015-08-15
        相关资源
        最近更新 更多