2017-03-28 43 views
0

我正在使用水豚,minitest,database_cleaner寶石,我很好奇數據庫清潔我的數據庫運行測試後,沒有清理我的數據庫,測試運行良好,用戶創建並可以成功登錄,然後我重新運行用相同的數據的測試,它說的電子郵件已被使用,這意味着: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: '[email protected]' 
     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

您需要將page.must_have_content 'USER SETTING & INFO'放在DatabaseCleaner.clean之前。這是因爲當你點擊一個按鈕時,它可以立即返回,而按鈕點擊觸發的請求異步發生。在你的情況下,這意味着你點擊按鈕,然後清理數據庫,同時發送創建新用戶的請求,並且最有可能在數據庫已被清除之後到達,從而創建未被清除的用戶。

通常DatabaseCleaner方法將從minitest(在RSpec之前的/ append_after塊之前)從setup/teardown中調用,以確保在測試完成之前不會發生數據庫清理,並且即使在測試失敗。