我有一些功能需要在测试数据库运行之前将大量数据加载到测试数据库中。我已将这些规格标记为"慢"。我想要完成的是任何特征规范标记为"缓慢"将仅填充数据库一次,将其用于该功能中的所有规范,然后在该功能完成后清理整个数据库。
以下是我如何设置spec_helper.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.after(:all, :slow => true) do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
然后将这些功能设置为:
feature "Options page", :slow do
before(:each) do
DatabaseCleaner.strategy = :truncation, { except: %w[ products options models prices ] }
end
end
直到database_cleaner 1.3,这对我一直有效。现在,一些规格将运行正常,但随后它们都开始失败:
Failure/Error: Unable to find matching line from backtrace
ActiveRecord::StatementInvalid:
Mysql2::Error: SAVEPOINT active_record_1 does not exist: ROLLBACK TO SAVEPOINT active_record_1
我应该在这里使用不同的策略吗?有没有人对我在这里想要完成的事情有经验?