【发布时间】:2011-02-08 08:33:40
【问题描述】:
有什么简单的方法可以将developmenet数据库中的数据复制到测试数据库中吗?我知道有一种方法可以复制模式并重新创建数据库,但是是否有任何 rake 任务可以用开发数据库填充测试数据库?
【问题讨论】:
标签: ruby-on-rails unit-testing rake
有什么简单的方法可以将developmenet数据库中的数据复制到测试数据库中吗?我知道有一种方法可以复制模式并重新创建数据库,但是是否有任何 rake 任务可以用开发数据库填充测试数据库?
【问题讨论】:
标签: ruby-on-rails unit-testing rake
你可以使用:
rake db:test:clone
将开发数据库复制到测试中。
【讨论】:
你可以直接使用mysql:
mysqldump app_development | mysql app_test
【讨论】:
如果你只是想克隆整个开发数据库,那么仅仅复制 development.sqlite3 并将其重命名为 test.sqlite3 有什么问题?您可以通过设置可以从命令行运行的批处理文件(或操作系统上的等效文件)来自动化该过程。
这将在本地工作,但我刚刚意识到您可能正在考虑一个非本地环境,在这种情况下它可能不会。
【讨论】:
如果你使用种子的另一种方法 (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,它将删除您的种子数据=]
对于所有数据库:
rake db:test:clone && rake db:seed RAILS_ENV='test'
【讨论】:
使用 Postgres,像这样复制数据库:
使用模板创建数据库 newdb originaldb OWNER dbuser;
【讨论】: