当我运行我的rspec测试时,许多因我的mongodb数据库中的陈旧数据而失败。 AFAIK用干净的数据库进行测试要好得多。
使用mysql,我可以运行rake db:test:prepare
来清理数据库。如何在每次测试之前清理nd /或重新播种数据库?
答案 0 :(得分:30)
Mongoid 3.0 ,其他任何一个答案都不适合我。我使用@Batkins答案修改如此
RSpec.configure do |config|
# Clean/Reset Mongoid DB prior to running each test.
config.before(:each) do
Mongoid::Sessions.default.collections.select {|c| c.name !~ /system/ }.each(&:drop)
end
end
或者,如果你想清空集合但又不想丢弃它(也许你有索引或其他东西),那就这样做
Mongoid::Sessions.default.collections.select {|c| c.name !~ /system/}.each {|c| c.find.remove_all}
答案 1 :(得分:18)
恕我直言,这是一个比安装宝石更好的解决方案,用于清理数据库的特定目的....你的spec_helper.rb中有3行:
RSpec.configure do |config|
#Other config stuff goes here
# Clean/Reset Mongoid DB prior to running the tests
config.before :each do
Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop)
end
end
信用:A user named Alex posted this as a solution for a similar question.
答案 2 :(得分:16)
如果您使用的是MongoID,则可以将Database Cleaner与截断策略结合使用。 E.g:
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before :each do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
end
config.after do
DatabaseCleaner.clean
end
end
答案 3 :(得分:8)
答案 4 :(得分:3)
添加到gemfile:
gem 'database_cleaner', :github => 'bmabey/database_cleaner'
运行bundle install
将此添加到spec_helper:
config.before(:suite) do
DatabaseCleaner[:mongoid].strategy = :truncation
DatabaseCleaner[:mongoid].clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
完全归功于: http://blog.codelette.com/2013/07/07/make-rspec-clean-up-mongoid-records/
答案 5 :(得分:0)
例如,如果您使用多个MongoDB客户端,或者不使用默认客户端,则可以在mongoid.yml中创建一个新客户端,例如:“ actions”。
您需要指定连接名称。 例如供“操作”客户端使用:
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner[:mongoid, { connection: :actions }].start
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner[:mongoid, { connection: :actions }].clean
DatabaseCleaner.clean
end