2013-07-18 80 views
2

後,此配置工作得很好,當我使用SQLite:DB清理不清理數據庫,從SQLite的切換到PostgreSQL

config.before(:suite) do 
    DatabaseCleaner.strategy = :truncation 
    end 
    config.before(:each) do 
    controller.stub(:should_navigate_user?).and_return(false) rescue "" 
    DatabaseCleaner.start 
    end 
    config.after(:each) do 
    DatabaseCleaner.clean 
    end 

當我切換到PostgreSQL,我開始收到錯誤,當測試依賴於id號數據庫中的條目。我在測試期間查看了數據庫,並且從未清除數據庫。

如果我切換到以下配置:

config.before(:suite) do 
    DatabaseCleaner.strategy = :truncation 
    end 
    config.before(:each) do 
    DatabaseCleaner.clean 
    controller.stub(:should_navigate_user?).and_return(false) rescue "" 
    DatabaseCleaner.start 
    end 
    config.after(:each) do 
    DatabaseCleaner.clean 
    end 

我所有的測試都通過了,但我有我的以後的測試方法和叫乾淨嗎?

我不應該在每次測試之前和之後清理數據庫 - 對吧?我覺得我在某個地方誤解了某些東西。我不明白什麼。

回答

1

您在非持久模式下使用了sqlite。 PostgreSQL沒有這樣的選項,總是持久的。完全使用drop database/create database來清理它。

3

我正在使用數據庫清理器的postgres。它的工作現在很好,但我記得起初有麻煩。我粘貼下面的配置。您可以在spec_helper.rb堅持這一點,或者在另一個文件如/support/database_cleaner.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 

另外,還要確保你在spec_helper打開事務燈具關:

config.use_transactional_fixtures = false 
+0

我使用相同的配置,它仍然沒有爲我打掃。 – WebQube

+0

爲什麼你會爲此而失望? @WebQube?沒有理由。這是一個有效的配置,它的工作原理。也許你應該在隨機投票前提供更多關於你的情況的信息。 – jacklin

+0

對不起,但這是我認爲,順便說一句,現在堆棧不會放棄投票。 – WebQube