ruby-on-rails:播种数据策略(或将测试数据加载到开发人员数据库中)

标签 ruby-on-rails testing fixtures seeding

我想经常清除并重新加载我的开发人员数据库 (Ruby on rails)。

当然,我可以通过网页手动添加数据,但我想知道是否有人有任何针对此类测试的策略。

(我已经进行了单元、功能和集成测试,仅供引用)

谢谢

最佳答案

db 目录中创建一个 seed.yml 文件。为您要创建的每个模型添加一个 YAML 文档。该文件应包含哈希列表。每个散列应包含模型属性。

  users:
      -   login: jake
          password: jake123
          password_confirmation: jake123
          first_name: Jake
          last_name: Driver

      -   login: Jane
          password: jane123
          password_confirmation: jane123
          first_name: Jane
          last_name: McCain

  categories:

  products:

在你的 seed.rb 文件中

seed_file = File.join(Rails.root, 'db', 'seed.yml')
config = YAML::load_file(seed_file)
User.transaction do 
  config.keys.each{ |key| key.classify.constantize.create(config[key]) }
end

我发现在 YML 文件中修改种子数据更容易。我构建的应用程序由不同的团队部署。他们也喜欢这种方法。

为了清除数据,我在 lib\tasks 目录中有一个 rake 任务。我将 rake 任务作为 app:flush 运行。

namespace :app do
  desc "Flush all the seed data "
  task :flush => :environment do
    config = YAML::load_file(File.join(Rails.root, 'db', 'seed.yml'))
    User.transaction do 
      config.keys.each{ |table| truncate_table(table)}
    end
  end
end

关于ruby-on-rails:播种数据策略(或将测试数据加载到开发人员数据库中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2389269/

相关文章:

testing - 如何使用 clojure.test 将值从 fixture 传递到测试?

ruby-on-rails - 使用 Factory Girl 进行测试时处理数据库的正确方法

ruby-on-rails - 在activerecord关系上定义方法

ruby-on-rails - 在 Rails View 中构建自定义路径

http - 为什么 http.Get 会产生两个请求而不是一个请求?

c++ - 什么是 check_union256d?

python - 我可以将参数传递给 pytest fixtures 吗?

ruby-on-rails - 将 chart.js Canvas 导出到 Rails 中的 prawn-pdf

mysql - 无法从 "Lost connection to MySQL server"错误中解救

testing - 打印当前 DOM 元素