【问题标题】:Speeding up RSpec & Factory girl model tests?加快 RSpec 和工厂女孩模型测试?
【发布时间】:2013-02-01 00:17:54
【问题描述】:

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

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

有什么方法可以两全其美?或者我应该在模型/单元测试之外的某个地方明确地测试数据库集成部分?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多