2011-04-28 54 views
8

我開始一個新的應用程序,並注意到從上次構建MongoID應用程序的一些缺失文檔。即他們曾經在不再存在的頁面上建議http://mongoid.org/docs/integration/包含一些代碼以在測試之後刪除MongoID的集合。使用新的Rails/MongoID應用程序配置RSpec

它不在網站上提及... 是這(****下面)不再被認爲是必要的或良好的做法?!?

#spec/spec_helper.rb: 
... 
RSpec.configure do |config| 

    config.mock_with :rspec 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    #config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    #config.use_transactional_fixtures = true 

    # Below from <http://mongoid.org/docs/integration/> **** 
    config.after :suite do 
    Mongoid.master.collections.select do |collection| 
     collection.name !~ /system/ 
    end.each(&:drop) 
    end 
end 

回答

11

修改文件投機/ spec_helper.rb來補充一點:

 
RSpec.configure do |config| 
    # Other things 

    # Clean up the database 
    require 'database_cleaner' 
    config.before(:suite) do 
    DatabaseCleaner.strategy = :truncation 
    DatabaseCleaner.orm = "mongoid" 
    end 

    config.before(:each) do 
    DatabaseCleaner.clean 
    end 
end 
+0

不適用於Mongoid 4.0和rspec-core 2.14.7。 我在使用@Jan解決方案,下面是 – roody 2013-11-20 14:28:51

2

你可以繼續做(儘管Suite前可能切換到), - 所述DatabaseCleaner寶石是不錯,但。

config.before(:suite) do 
    DatabaseCleaner.strategy = :truncation 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    end 
12

這也似乎是工作在Rails3中,更整潔

config.before :each do 
    Mongoid.purge! 
end 

它不需要額外的創業板。

+0

只要有人驗證(我目前沒有一個活動的MongoID項目嘗試這個),我會在這裏移動勾號,因爲這看起來似乎更簡單。 – Meltemi 2012-09-07 23:34:26

+1

它的工作原理,但有一個警告:Mongoid.purge!也會刪除所有索引。這意味着依賴具有唯一性:true的索引的任何規格都將失敗。解決方法是在調用清除後立即在每個模型類上調用create_indexes。 – ced 2012-09-10 18:28:10