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我错过了吗?
是的,我同意。对于这种用例,单行Mongoid命令比宝石更好。 –