用水豚清理数据库
database cleanup with capybara
我正在使用水豚、minitest、database_cleaner gem,我很好奇数据库清理器在我 运行ning 测试后没有清理我的数据库,测试 运行ning 很好,用户已创建并可以成功登录,然后我用相同的数据重新 运行 测试,它说电子邮件已经被占用,意思是:database_cleaner 而不是 运行ning
下面是我的测试
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
您需要将 page.must_have_content 'USER SETTING & INFO'
放在 DatabaseCleaner.clean
行之前。这是因为当您单击按钮时,它可以立即 return 而按钮单击触发的请求是异步发生的。在您的情况下,这意味着您单击按钮,然后清理数据库,同时发送创建新用户的请求,并且很可能在数据库已经被清除之后到达,从而创建一个未被清除的用户。
通常,DatabaseCleaner 方法会从 setup/teardown 使用 minitest(before/append_after 块 RSpec)调用,以确保在测试完成之前不会进行数据库清理,并且即使测试失败,他们也会得到 运行。
我正在使用水豚、minitest、database_cleaner gem,我很好奇数据库清理器在我 运行ning 测试后没有清理我的数据库,测试 运行ning 很好,用户已创建并可以成功登录,然后我用相同的数据重新 运行 测试,它说电子邮件已经被占用,意思是:database_cleaner 而不是 运行ning
下面是我的测试
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
您需要将 page.must_have_content 'USER SETTING & INFO'
放在 DatabaseCleaner.clean
行之前。这是因为当您单击按钮时,它可以立即 return 而按钮单击触发的请求是异步发生的。在您的情况下,这意味着您单击按钮,然后清理数据库,同时发送创建新用户的请求,并且很可能在数据库已经被清除之后到达,从而创建一个未被清除的用户。
通常,DatabaseCleaner 方法会从 setup/teardown 使用 minitest(before/append_after 块 RSpec)调用,以确保在测试完成之前不会进行数据库清理,并且即使测试失败,他们也会得到 运行。