【问题标题】:What's the best method for creating "test" database content in >= Rails 3.2.0?在 >= Rails 3.2.0 中创建“测试”数据库内容的最佳方法是什么?
【发布时间】:2012-02-02 14:16:49
【问题描述】:

我希望能够创建几十个用户、文章(或应用程序独有的任何资源)等,以查看应用程序在满时的外观和响应。这仅用于测试/开发目的,因此我希望能够将其回滚、销毁或任何轻松的操作。也许我想多了,谁知道呢。

我看到人们建议只使用标准迁移,这是一个想法,但我想这样做(可选),我不希望项目中的每个人都在更新应用时获取示例内容。

其他人提到过工厂女孩,但这看起来可能是矫枉过正,或者是真正为测试而设计的宝石的副用等。不是很清楚。

那么在这种情况下你们都怎么做呢?

【问题讨论】:

    标签: ruby-on-rails database ruby-on-rails-3 factory-bot rails-migrations


    【解决方案1】:

    我推荐一个 rake 任务。你可以把它贴在lib/tasks 这样项目中的每个人都可以得到它,但不是每个人都需要运行它,只有当它运行时它才会做任何事情。 This a great tutorial 关于编写 rake 任务,请记住阅读 Rails 标题下的部分,以了解如何引入模型。

    之后,您的 rake 任务基本上只是 ruby​​ 代码。我建议使用动态find_or_create_by 方法来显式创建您想要的模型,如果它运行多次,它们将不会被创建多次。您还可以选择在创建之前销毁特定模型中的所有记录。

    我不建议使用 Factory Girl,因为您可能希望明确控制模型的创建方式。

    这里有一个示例 rake 任务来展示它是多么容易:

    #lib/tasks/my_task.rake
    task :fake_data => :environment do
        MyModel.find_or_create_by_name("Test")
    end
    

    然后在您的控制台中:

    rake fake_data
    

    或者:

    rake fake_data RAILS_ENV=test
    

    哒哒!

    【讨论】:

    • 这绝对是一个更好的方法。我偶然发现了 Populator 和 Faker,它们非常棒。我现在遇到的唯一问题是将 Populator 与 Devise 一起使用。 Populator 直接进入数据库并且不使用 User 模型,因此所有各种​​盐和哈希都不正确。
    • 是的,Faker 与 Factory Girl 的合作非常棒。如果你不需要过多控制你的虚假数据,那么我会选择 Factory Girl 和 Faker。您仍然可以显式创建用户,我相信 Devise 处理的所有其他属性都会很好。
    【解决方案2】:

    了解 Rails 种子数据功能

    http://railscasts.com/episodes/179-seed-data

    【讨论】:

    • 当您运行 rake db:seed 时,种子文件中的所有内容都不会生成吗?如果我想在生产中使用种子来填充用户帐户类型、订阅计划等信息怎么办。在这种情况下,我不想在其中包含测试内容。
    • 是的,我不建议这样做,因为每当您运行 rake db:seedrake db:reset 时,都会加载种子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多