数据库清理程序在不应该删除数据时删除它

时间:2014-03-19 12:46:56

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

有没有人遇到这样的问题?

我有一个控制器,可以触发邮件投递:

  def create
    create! do |success, failure|
      success.js do
        CandidateMailer.donation_notification(current_candidate).deliver
      end
    end
  end

我收到了那封邮件:

  def donation_notification(candidate)
    puts Candidate.count  # note: during test - count of candidates is 0
    @candidate = candidate
    email_with_name = "#{@candidate.profile.name} <#{@candidate.email}>"
    mail(to: email_with_name, subject: 'New Donation Received!')
  end

我不明白为什么数据库清理程序会在测试实际完成之前删除所有数据。

这是一个JS测试(使用Webkit),如果这很重要的话。

这是我的配置:

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.clean_with :truncation
  end

  config.before(:each) do
    if Capybara.current_driver == :rack_test
      DatabaseCleaner.strategy = :transaction
    else
      DatabaseCleaner.strategy = [:truncation, { pre_count: true }]
    end

    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end
end

1 个答案:

答案 0 :(得分:0)

如果我从code正确理解,cleanclean_with实际上都委托给strategy.clean,这意味着他们都会积极清理。

致电时

  config.before(:suite) do
    DatabaseCleaner.clean_with :truncation
  end

它会在测试开始之前清理您的数据库。

在测试情况下,如果您在套件开头(或每次测试之前)播种测试数据,这可能没问题。