2013-02-01 48 views
0

我们使用ActiveRecord独立(不是Rails应用程序的一部分)来使用RSpec进行单元测试。我们正在测试数据库上的触发器,它将行插入到审计表中。如何强制ActiveRecord始终插入,更新,删除和检索数据库?

的类别是:

文件夹下有很多文件

文件夹下有很多FileAudit

事件的顺序是这样的:

  • 创建文件夹
  • START TEST ONE
  • 创建文件
  • 做一些东西到文件
  • 获取Folder.file_audits
  • 检查相关FileAudit记录
  • 销毁文件
  • 销毁FileAudits
  • END测试一个
  • STA RT测试两个
  • 创建文件
  • 做一些其他的东西,文件
  • 获取Folder.file_audits
  • 检查相关FileAudit记录
  • 销毁文件
  • 销毁FileAudits
  • 端到端测试TWO
  • 销毁文件夹

来自测试一的FileAudits正在被破坏,但不是来自测试二。 ActiveRecord似乎认为在第二次测试结束时,该表中并没有新的东西可以删除。

我可以做Folder.file_audits(true)来刷新缓存,但我宁愿只是禁用任何和各种缓存,并让ActiveRecord只是做我告诉它而不是做它认为最好的。

我还需要在File上设置一个标志为相同的值并验证触发器没有创建审计记录。当我将该标志设置为不同的值时,我可以在日志中看到更新语句,但是当我将它设置为相同的值并保存时,日志中没有更新。

我确信缓存等等对于网站来说很好,但我们并没有这样做。我们需要它始终从数据库获取所有记录,并且始终更新和删除。我们怎么做到这一点?

我们使用的是ActiveRecord 3.1.3。

感谢

回答

0

我最初的猜测是,有你正在做交易的东西在测试中的一个。如果是的话,你可以有效地消除包装单元测试本身的外部事务,在这种情况下会导致单元测试清理无法回滚。

0

我不知道这是否适用于您,但过去我在执行model.save而不是model.save!时遇到了问题。有时我会在保存时得到验证错误,但没有验证错误不会引发实际异常,所以我不知道保存是否成功。

相关问题