【问题标题】:Rails - Populate test database with development dataRails - 使用开发数据填充测试数据库
【发布时间】:2011-02-08 08:33:40
【问题描述】:

有什么简单的方法可以将developmenet数据库中的数据复制到测试数据库中吗?我知道有一种方法可以复制模式并重新创建数据库,但是是否有任何 rake 任务可以用开发数据库填充测试数据库?

【问题讨论】:

    标签: ruby-on-rails unit-testing rake


    【解决方案1】:

    你可以使用:

    rake db:test:clone
    

    将开发数据库复制到测试中。

    【讨论】:

    • 根本不适合我。结构已创建,但不复制任何记录。那个任务是复制数据吗?描述并没有直接指出这一点。
    • db:test:clone 是 db:schema:dump 和 db:test:prepare 的组合,实际上并不复制 data
    • 很遗憾没有回答问题。
    • 已弃用。
    • @mdrozdziel,测试数据库不应该有数据,应该为每个测试创建数据。
    【解决方案2】:

    你可以直接使用mysql:

    mysqldump app_development | mysql app_test
    

    【讨论】:

    • 如果您不使用 mysql,@j0k 迄今为止的最佳答案是:rake db:test:clone && rake db:seed RAILS_ENV='test'
    【解决方案3】:

    如果你只是想克隆整个开发数据库,​​那么仅仅复制 development.sqlite3 并将其重命名为 test.sqlite3 有什么问题?您可以通过设置可以从命令行运行的批处理文件(或操作系统上的等效文件)来自动化该过程。

    这将在本地工作,但我刚刚意识到您可能正在考虑一个非本地环境,在这种情况下它可能不会。

    【讨论】:

      【解决方案4】:

      如果你使用种子的另一种方法 (db/seeds.rb)

      首先,使用以下代码向 lib/tasks/test_seed.rake 添加一个 rake 任务:

      namespace :db do
        namespace :test do
          task :prepare => :environment do
              Rake::Task["db:seed"].invoke
          end
        end
      end
      

      然后,每当您通过迁移和种子更改数据库结构/内容时,您都可以运行

      rake:db:test:prepare
      

      复制架构和种子数据。

      所以完整的步骤是:

      rake db:migrate
      rake db:seed
      rake db:test:prepare
      

      【讨论】:

      • 如果您在rake db:seed 之后运行rake db:test:prepare,它将删除您的种子数据=]
      【解决方案5】:

      对于所有数据库:

      rake db:test:clone && rake db:seed RAILS_ENV='test'
      

      【讨论】:

      • ops,我以为你想用 seed.rb 文件填充测试数据库。
      【解决方案6】:

      使用 Postgres,像这样复制数据库:

      使用模板创建数据库 newdb originaldb OWNER dbuser;

      【讨论】:

      • 我没有使用此命令,但它帮助使用 pgAdmin 创建了数据库的副本。
      猜你喜欢
      • 1970-01-01
      • 2012-02-25
      • 2020-03-04
      • 2011-04-15
      • 2021-09-16
      • 1970-01-01
      • 2013-02-28
      • 2013-06-28
      • 2013-01-17
      相关资源
      最近更新 更多