RSpec和数据库清理程序 – 将某些对象永久保留在测试数据库中

我(姗姗来迟)开始使用RSpec / capybara测试我的Rails应用程序(购物网站),使用数据库清理程序清除数据库,并使用Factory Girl为每个测试生成新对象(像大多数人一样)。 这很好用,我认为清除测试之间的数据是个好主意。

但是,它可能会变慢并且(据我所知)生成同一对象的多个实例有点乏味。 在我的数据库中有一些对象总是相同的,或者我将始终为测试生成相同的副本。 例如,我的Package模型,它定义订阅包的定价和function限制。 它可能永远不会改变。

有没有办法,使用此配置(请注释并指定是否需要更多信息),将某些对象实例放入测试数据库并将其从数据库清理器中排除 ,或以任何其他方式保留特定对象的永久副本测试数据库?

这主要是为了提高测试速度。

如果您的应用程序永远不会更改数据库对象,并且在生产和开发数据库以及测试数据库中都是相同的,那么正确的做法是使它们成为种子。 在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 (请注意,这些灯具通常是一个坏主意,因为它们会使您的测试难以阅读和鼓励你在现有灯具周围进行测试,这会导致纠结的混乱。测试清晰度和稳健性比速度更重要。)

如果你正在使用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 )但是,我不知道告诉Database Cleaner删除给定类的某些实例而不是其他实例的方法。