我有给定的测试代码:
describe 'A new user', js: true do
before do
@new_user = Fabricate.build(:user)
end
it 'should sign up' do
#login code
visit '/'
click_link 'Login'
fill_in 'user[email]', :with => @new_user.email
fill_in 'user[password]', :with => @new_user.password
click_button 'Login now'
#login code end
page.should have_content("Hello #{@new_user.first_name}!")
current_path.should == dashboard_path
end
it 'should receive a confirmation mail' do
#same login code again
visit '/'
click_link 'Login'
fill_in 'user[email]', :with => @new_user.email
fill_in 'user[password]', :with => @new_user.password
click_button 'Login now'
mail = ActionMailer::Base.deliveries.last
assert_equal @new_user.email, mail['to'].to_s
end
end
现在我想添加更多测试。为避免代码加倍,如何在所有测试之前运行一次水豚登录代码?一种解决方案是将登录代码放在 before 方法中。另一种方法是创建一个方法 do_login,将代码放入其中并像这样运行每个测试:
it 'should do something after login' do
do_login
#test code here
end
但是对于这两种解决方案,代码都会针对每个测试运行,这不是我想要的。将登录代码放入 abefore(:all)
也不起作用。
我怎样才能运行一些水豚代码,然后在此之后进行所有测试?