0

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

我有一个控制器,它触发邮件传递:

  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
4

1 回答 1

0

如果我从代码中正确理解,则cleanclean_with实际上都委托给strategy.clean,这意味着它们都在主动清理。

你打电话时

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

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

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

于 2014-03-19T18:04:20.343 回答