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

Ruby on rails 关于我在测试数据库中截断表的方法,ruby-on-rails,ruby-on-rails-3,activerecord,rspec,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Activerecord,Rspec,Ruby On Rails 3.1,在我的Rails应用程序开发中,当我运行Rspec测试时,我需要在(:all)之后在中截断测试数据库中的所有表 (即清除测试数据库中每个表中的所有数据) 为了解决这个问题,我想首先获取所有表示测试数据库中表的ActiveRecord模型,然后对于每个模型,我使用delete\u all方法清理每个表。这有点像: ALL_ACTIVE_RECORD_MODELS.each do |model| model.delete_all end 我有两个问题要问: 1.如何在我的rspec代码

在我的Rails应用程序开发中,当我运行Rspec测试时,我需要在(:all)之后在
中截断测试数据库中的所有表

(即清除测试数据库中每个表中的所有数据)

为了解决这个问题,我想首先获取所有表示测试数据库中表的
ActiveRecord
模型,然后对于每个模型,我使用
delete\u all
方法清理每个表。这有点像:

ALL_ACTIVE_RECORD_MODELS.each do |model|
      model.delete_all
end
我有两个问题要问:

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


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

有一个gem可以精确地执行此任务,称为数据库清理器:

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


请注意,在测试旨在实现事务性的行为时,这有时会导致出现问题,因为您不会看到您的事务执行。您可以通过在不希望使用事务的任何测试集之前添加
self.use\u transactional\u fixtures=false
来解决此问题。不过,请记住在以后再次清除数据。

当涉及到您可能希望使用rails进行的操作时,有一个很好的例子:。)我的第一个问题怎么样?虽然如果我使用database cleanner gem,它是不需要的……但我仍然有兴趣知道。您可以阅读您的数据库模式并推断它-除此之外,我恐怕不知道