在我的 Rails 应用开发中,当我运行 Rspec测试时,我需要截断我的测试数据库中的所有表 {{ 1}}。
(那就是清理测试数据库中每个表中的所有数据)
为了解决这个问题,我想首先得到代表测试数据库中表的所有after(:all)
模型,然后是每个模型< / strong>,我使用ActiveRecord
方法清理每个表。 Thant有点像:
delete_all
我有两个问题来问这个问题:
1. 如何在我的rspec代码中获取Rails中的所有活动记录模型?
2. 我是否使用可接受的方式截断测试数据库中的所有表?如果没有,有什么替代方式?
答案 0 :(得分:3)
有一个gem可以完成这个名为database_cleaner的任务:https://github.com/bmabey/database_cleaner。
它将确保从数据库中删除所有内容,但其默认策略不是删除内容,而是使用事务并在每次测试后简单地回滚更改。
请注意,在测试旨在进行交易的行为时,偶尔会导致问题,因为您不会看到您的交易执行。您可以通过在任何不想使用事务的测试集之前添加self.use_transactional_fixtures = false
来解决此问题。请记住,之后要再次清除您的数据。