如何在rails应用程序中使用rspec和database_cleaner保留某些表的测试数据

时间:2014-06-12 18:50:53

标签: ruby-on-rails rspec rspec-rails database-cleaner

我有一些功能需要在测试数据库运行之前将大量数据加载到测试数据库中。我已将这些规格标记为"慢"。我想要完成的是任何特征规范标记为"缓慢"将仅填充数据库一次,将其用于该功能中的所有规范,然后在该功能完成后清理整个数据库。

以下是我如何设置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

我应该在这里使用不同的策略吗?有没有人对我在这里想要完成的事情有经验?

0 个答案:

没有答案