最近开发中出现一个奇葩场景。
Redmine 中,目前有几十个 issue,每个 issue 都需要修改状态,因为每个 issue 都是数据独立的,所以想把修改这件事放到多个进程中去做,充分利用一下硬件资源嘛。
使用了 Gem Parallel
Parallel.each(@issues, in_processes: 4) do |issue|
do-something, including mails delivering
ene
ps: 每个 issue 修改并保存成功,会发出一封邮件。
相应的单元测试中,监控不到发送邮件的正确数目,目前 ActionMailer::Base.deliveries.count 的值恒为 0,推测:测试进程里的 ActionMailer::Base.deliveries 和业务逻辑里的 ActionMailer::Base.deliveries 是独立的……手工验证确实是这样的,,那么问题来了: 这种情况应该怎么写测试用例呢?
单元测试,理论上每运行完都会运行相应的 rollback ,保证数据库的纯正。目前发现,上面的数据是会保留的,从而干扰了一些正常的测试。。。 这种情况是不是有方法解决呢?