关于我在测试数据库中截断表的方法

时间:2011-11-02 08:51:07

标签: ruby-on-rails ruby-on-rails-3 activerecord rspec ruby-on-rails-3.1

在我的 Rails 应用开发中,当我运行 Rspec测试时,我需要截断我的测试数据库中的所有表 {{ 1}}。

(那就是清理测试数据库中每个表中的所有数据)

为了解决这个问题,我想首先得到代表测试数据库中的所有after(:all) 模型,然后是每个模型< / strong>,我使用ActiveRecord方法清理每个表。 Thant有点像:

delete_all

我有两个问题来问这个问题:

1. 如何在我的rspec代码中获取Rails中的所有活动记录模型

2. 我是否使用可接受的方式截断测试数据库中的所有表?如果没有,有什么替代方式?

1 个答案:

答案 0 :(得分:3)

有一个gem可以完成这个名为database_cleaner的任务:https://github.com/bmabey/database_cleaner

它将确保从数据库中删除所有内容,但其默认策略不是删除内容,而是使用事务并在每次测试后简单地回滚更改。

请注意,在测试旨在进行交易的行为时,偶尔会导致问题,因为您不会看到您的交易执行。您可以通过在任何不想使用事务的测试集之前添加self.use_transactional_fixtures = false来解决此问题。请记住,之后要再次清除您的数据。