2016-05-16 49 views
1

我使用Mongoid作为我的数据库,并按照其他Stackoverflow问题的指示配置了我的spec_helper.rb文件,但是我仍然收到对象存在于后续测试中的错误。所以,database_cleaner不会清理我的测试数据库,因为它应该。Database_cleaner宝石不清洗

这里是我的spec_helper.rb

ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rails/mongoid' 
require 'mongoid-rspec' 
require 'database_cleaner' 

Mongoid.load!(Rails.root.join("config", "mongoid.yml")) 

# Load support files 
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } 
RSpec.configure do |config| 
    config.mock_with :rspec 
    #config.use_transactional_fixtures = true 
    config.infer_base_class_for_anonymous_controllers = false 
    config.order = "random" 

    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 
end 

我的RSpec的测试文件很简单:

describe Stock do 
    it "should get created with only name and symbol" do 
    stock = Stock.create(name: "Netflix", symbol: "NFLX") 
    expect(stock.errors.full_messages).to eq [] 
    end 
end 

我得到的输出是第一次运行正常(后我手动复位DB)与rake db:reset RAILS_ENV=test然而,每次运行后,我得到︰

Failures: 

    1) Stock should get created with only name and symbol 
    Failure/Error: expect(stock.errors.full_messages).to eq [] 

     expected: [] 
      got: ["Symbol is already taken"] 

     (compared using ==) 
    # ./spec/models/stock_spec.rb:6:in `block (2 levels) in <top (required)>' 

Wha我错过了吗?

回答

4

那么,在阅读更多内容后,我已经确定database_cleaner和Mongo在一起玩的不是很好。虽然它可能不是最干净的解决方案,它很简单:

在我spec_helper.rb文件,我结束了加入这行来RSpec.configure块:

config.after(:each) do 
    Mongoid.purge! 
end 
+0

是的,我同意。对于这种用例,单行Mongoid命令比宝石更好。 –