如何清理测试数据库,但不是完全清理,只清理 RSPEC 和 Capybara 测试生成的数据

问题描述

我在 rails 5.2.6 中有一个应用程序,我正在使用 RSPEC 和 Capybara 对其进行测试,为此我有一个包含用于执行测试的数据的测试数据库,并且我正在运行一些生成数据的测试存储在这数据库中。我需要的是,在运行测试后,这些数据不会存储在其中。

我使用了 gem database_cleaner 但这会清除测试数据库的所有数据,我只想删除测试生成的数据。

我的database.yml的一部分:

development:
  <<: *default
  database: f_development
  host: localhost
  port: 5432
  username: postgres
  password: postgres

test:
  <<: *default
  database: f_test
  host: localhost
  port: 5432
  username: postgres
  password: postgres

解决方法

检查您的 spec/rails_helper.rb 配置部分。 看起来你已经设置了

config.use_transactional_fixtures = false

不在事务中执行每个测试以便数据保留在数据库中意味着什么。

此设置的默认行为为 true。

您可以阅读它的工作原理here

另一种可以帮助您的解决方案:您可以在运行测试之前设置种子数据,如所述here