我有两个水豚测试,第一个测试用户,第二个用于测试仅供登录用户使用的功能。
但是,我无法进行第二次测试,因为会话没有在测试中维护(显然,应该是这样)。
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调用生成的页面是全局登录屏幕,而不是我期望的管理主页(注册会让您登录)。我在这里做错了什么?
答案 0 :(得分:6)
发生这种情况的原因是测试是事务性的,因此您将在测试之间失去状态。要解决此问题,您需要在函数中复制登录功能,然后再次调用它:
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
答案 1 :(得分:3)
每个测试都在干净的环境中运行。如果您希望执行常规设置和拆卸任务,请按照Rails guides中的说明定义setup
和teardown
方法。