使RSpec销毁记录而不是删除它们

时间:2011-11-18 09:23:20

标签: activerecord transactions ruby-on-rails-3.1 rspec2

在我的应用程序中,我有一个模型,它有after_create和after_destroy方法创建一个目录,然后分别在文件系统上销毁它。

我在RSpec请求规范中已经注意到模型记录被创建了find(因此创建了目录),但我假设记录只是在每个规范之后被删除而不是被销毁,因此这些目录代替了被删除。要么或者RSpec只是围绕整个规范回滚数据库事务?

我的问题是,如何让RSpec安全地销毁这些记录,以便文件系统保持同步?

我试过了:

after(:each) do
  Entity.destroy_all
end

这是有效的,但我不确定这是最好的方式。

也许我可以在我的模型中做得更好,这样如果我检测到事务回滚,我也可以删除目录吗?我从来没有听说过这个功能虽然可能在begin rescue ensure块中。

任何提示?

1 个答案:

答案 0 :(得分:1)

事实证明,您可以关闭某些规范的事务,例如需要完全添加记录并在回调后运行某些规范的事务。我也通过after_create修改为after_commit(:on =>:create)(不是100%肯定语法,只是从内存中取出)来添加和删除文件系统元素,因为这是确保记录存在的最安全的方法在进行文件系统更改之前的数据库。