私は与えられたテストコードを持っています:
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
ここで、さらにテストを追加したいと思います。コードの重複を避けるために、すべてのテストの前にカピバラのログインコードを1回実行するにはどうすればよいですか?1つの解決策は、ログインコードをbeforeメソッドに入れることです。もう1つは、メソッドdo_loginを作成し、その中にコードを配置して、次のようにすべてのテストを実行することです。
it 'should do something after login' do
do_login
#test code here
end
しかし、どちらのソリューションでも、コードはすべてのテストで実行され、それは私が望んでいることではありません。ログインコードをに入れてもbefore(:all)
機能しません。
カピバラコードを一度実行してから、その後すべてのテストを実行するにはどうすればよいですか?