ログインページに Capybara の機能仕様があり、FactoryGirl + DatabaseCleaner を使用しています
require 'rails_helper'
feature 'Admin signs in' do
background do
FactoryGirl.create(:user)
end
scenario 'with valid credentials' do
visit admin_root_path
fill_in 'user_email', :with => 'email@email.com'
fill_in 'user_password', :with => 'testpassword'
click_button 'Sign in'
expect(page).to have_content('Dashboard')
end
scenario 'with invalid credentials' do
visit admin_root_path
fill_in 'user_email', :with => 'email@email.com'
fill_in 'user_password', :with => 'wrongpassword'
click_button 'Sign in'
expect(page).to have_content('Admin Login')
end
end
テストを実行すると、次のエラーが発生します。
1) Admin signs in test with invalid credentials
Failure/Error: FactoryGirl.create(:user)
ActiveRecord::RecordInvalid:
Validation failed: Email has already been taken
DatabaseCleaner は変更を元に戻すと思っていましたが、ユーザー レコードは 2 番目のシナリオ ブロックまでデータベースに残っているようです。
最初のシナリオの後にデータベースが確実にクリーンアップされるようにするにはどうすればよいですか?
この投稿に従ってデータベースクリーナーを構成しました
# support/database_cleaner_spec.rb
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
また、仕様ヘルパー ファイルを次のように更新しました。
config.use_transactional_fixtures = false