我使用capybara,minitest,database_cleaner gem,我好奇的数据库清理工具在运行测试后没有清理我的数据库,测试运行良好,用户创建并且可以成功登录,然后我重新运行使用相同的数据进行测试,它表示已经收到了电子邮件,这意味着:database_cleaner没有运行
以下是我的测试
require "test_helper"
require "database_cleaner"
feature 'register new user' do
scenario 'register', js: true do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.start
visit '/sign_up'
within '#new_user' do
fill_in 'User name', with: 'user4'
fill_in 'Email', with: 'user4@gmail.com'
fill_in 'Password', with: 'password4'
fill_in 'Password Konfirmasi', with: 'password4'
click_button 'Sign up'
end
DatabaseCleaner.clean
page.must_have_content 'USER SETTING & INFO'
end
end
及以下是我的测试Gemfile
group :development, :test do
gem 'selenium-webdriver', '2.53.4'
gem 'minitest-rails-capybara'
gem 'minitest-reporters'
gem 'database_cleaner'
end
答案 0 :(得分:0)
您需要将page.must_have_content 'USER SETTING & INFO'
放在DatabaseCleaner.clean
行之前。这是因为当您单击按钮时,它会立即返回,而按钮单击触发的请求会异步发生。在您的情况下,这意味着您单击按钮,然后清理数据库,同时发送创建新用户的请求,并且很可能在数据库已被清除后到达,从而创建一个不被清除的用户。
通常使用minitest(在使用RSpec之前/ append_after块之前)从setup / teardown调用DatabaseCleaner方法,以确保在测试完成之前数据库清理不会发生,并且即使在某些情况下它们也会运行测试失败。