Ruby on Rails 3 - 加快RSpec和工厂女孩模型测试?



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

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

有没有办法两全其美? 还是应该在模型/单元测试之外的某个地方显式测试数据库集成部分?

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

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

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

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

您应该

大多数时候使用build,我想确保某些值不会被保存为null,为此做一些规范,总是在数据库上创建对象是没有意义的

如果测试工厂是否创建一次有效对象,则可以信任工厂,它将始终创建有效对象。

此外,始终对不能为 null/nil 的字段使用状态验证,如果您的字段不是 nil,那么您可以确定数据库不会有 null 值

相关内容

  • 没有找到相关文章