使用水豚进行数据库清理

时间:2017-03-28 14:02:26

标签: ruby-on-rails capybara database-cleaner

我使用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

1 个答案:

答案 0 :(得分:0)

您需要将page.must_have_content 'USER SETTING & INFO'放在DatabaseCleaner.clean行之前。这是因为当您单击按钮时,它会立即返回,而按钮单击触发的请求会异步发生。在您的情况下,这意味着您单击按钮,然后清理数据库,同时发送创建新用户的请求,并且很可能在数据库已被清除后到达,从而创建一个不被清除的用户。

通常使用minitest(在使用RSpec之前/ append_after块之前)从setup / teardown调用DatabaseCleaner方法,以确保在测试完成之前数据库清理不会发生,并且即使在某些情况下它们也会运行测试失败。