有没有人遇到这样的问题?
我有一个控制器,可以触发邮件投递:
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
答案 0 :(得分:0)
如果我从code正确理解,clean和clean_with实际上都委托给strategy.clean
,这意味着他们都会积极清理。
致电时
config.before(:suite) do
DatabaseCleaner.clean_with :truncation
end
它会在测试开始之前清理您的数据库。
在测试情况下,如果您在套件开头(或每次测试之前)播种测试数据,这可能没问题。