繁体   English   中英

与Capybara和Rails保持会谈3

[英]Maintaining Session with Capybara and Rails 3

我有两个水豚测试,第一个测试用户,第二个用于测试仅供登录用户使用的功能。

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

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调用生成的页面是全局登录屏幕,而不是我期望的管理主页(注册登录)。 我在这做错了什么?

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

def login
  visit '/'
  fill_in 'Email', :with => 'bob@wagonlabs.com'
  fill_in 'Password', :with => 'password'
  fill_in 'Password confirmation', :with => 'password'
  click_button 'Sign up'
end

test 'sign up' do
 ...
 login
 assert page.has_content?("You have signed up successfully.")
end

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM