加速RSpec&工厂女孩模型测试?

时间:2013-02-01 00:17:55

标签: ruby-on-rails-3 rspec factory-bot

我目前正在使用FactoryGirl和Rspec来测试我的模型,这很棒,但非常慢。每个模型我运行的数百个测试大约需要30秒才能运行。

核心问题是,当我创建一个要测试的对象时,我正在使用FactoryGirl.create()方法。这会击中数据库,并且肯定比使用buildbuild_stubbed慢。但是,如果我只使用构建,那么我永远不会知道我是否遇到了数据库错误(例如尝试将空值写入我指定为非null的列)?

有没有办法让两全其美?或者我应该在模型/单元测试之外的某处明确地测试数据库集成部分吗?

3 个答案:

答案 0 :(得分:2)

不知道这是否适用于您的情况,但您是否考虑调整 spec_helper.rb 以使套件更快地运行?

我在this StackOverflow answer中记录了我的 spec_helper.rb 文件的演变(具体见编辑4),其中列出的其他SO答案和博客的链接帮助我减少了很多套房的运行时间。

答案 1 :(得分:0)

我倾向于使用FactoryGirl.build,或仅使用.new在模型规范中创建实例,然后仅在测试需要检查某些需要持久化实例的行为时保存它们。

当使用必须存在行ID的关联或联接时,这可能会有问题。这是一种权衡 - 快速测试与易于编写的测试。

答案 2 :(得分:0)

你应该在大多数时候使用构建,我想确保某些值不会被保存为null只做一些规范,没有意义总是在db上创建对象

如果您测试工厂创建一个有效对象,那么您可以信任工厂它将始终创建有效对象。

另外,总是在不能为null / nil的字段上使用状态验证,如果你的字段不是nil那么你可以确定db不会有空值