如果您的应用程序永远不会更改数据库对象,并且在生产和开发数据库以及测试数据库中是相同的,那么正确的做法是让它们成为种子。在 db/seeds.rb 中创建它们。更多关于种子的信息:http: //guides.rubyonrails.org/active_record_migrations.html#migrations-and-seed-data
如果您谈论的对象只属于您的测试数据库,您可以将它们设为 Rails 固定装置。更多关于固定装置的信息:http: //guides.rubyonrails.org/testing.html#the-low-down-on-fixtures(但请注意,固定装置通常不是一个好主意,因为它们会使您的测试更难阅读和鼓励你围绕现有的fixture编写测试,这会导致纠缠不清。测试的清晰度和健壮性比速度更重要。)
如果您正在使用 Database Cleaner 的截断或删除策略(可能是因为您在 Capybara 中使用了支持 Javascript 的驱动程序),并且您已经使用上述任何一种方法在测试之间将数据留在测试数据库中,您可以告诉数据库清理器不清空特定表:
DatabaseCleaner.strategy = :truncation, {:only => %w[widgets dogs some_other_table]}
或者
DatabaseCleaner.strategy = :truncation, {:except => %w[widgets]}
(来源:https ://github.com/bmabey/database_cleaner#how-to-use )但是,我不知道如何告诉数据库清理器删除给定类的某些实例而不是其他实例。