0

我们使用 ActiveRecord 独立(不是 Rails 应用程序的一部分)来使用 RSpec 进行单元测试。我们正在数据库上测试一个触发器,它将行插入到审计表中。

这些课程是:

文件夹有很多文件

文件夹有很多 FileAudit

事件的顺序是这样的:

  • 创建文件夹
  • 开始测试一
  • 创建文件
  • 对文件做一些事情
  • 获取 Folder.file_audits
  • 检查关联的 FileAudit 记录
  • 销毁文件
  • 销毁文件审计
  • 结束测试一
  • 开始测试二
  • 创建文件
  • 对文件做一些其他的事情
  • 获取 Folder.file_audits
  • 检查关联的 FileAudit 记录
  • 销毁文件
  • 销毁文件审计
  • 结束测试二
  • 销毁文件夹

来自测试一的 FileAudits 被破坏,但不是来自测试二。ActiveRecord 似乎认为在第二次测试结束时该表中没有新内容要删除。

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

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

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

我们正在使用 ActiveRecord 3.1.3。

谢谢

4

2 回答 2

0

我最初的猜测是,您正在其中一个测试中对交易进行处理。如果是这样,您实际上是在消除包装单元测试本身的外部事务,在这种情况下会导致单元测试清理没有任何回滚。

于 2013-02-01T18:45:45.123 回答
0

我不知道这是否适用于你,但我过去在做model.save而不是model.save!. 有时我会在保存时收到验证错误,但如果没有爆炸,验证错误不会引发实际异常,所以我永远不知道保存不成功。

于 2013-02-01T18:55:27.567 回答