2010-04-15 67 views
16

将开发数据库中的数据复制到测试数据中是否有任何微不足道的方法?我知道这是一种复制模式并重新创建数据库的方法,但是有没有任何使用开发工具填充测试数据库的rake任务?Rails - 使用开发数据填充测试数据库

回答

16

您可以MySQL的直接使用:

mysqldump app_development | mysql app_test 
+0

如果你没有使用mysql,@ j0k到目前为止已经得到了最好的答案:rake db:test:clone && rake db:seed RAILS_ENV ='test' – Krut 2012-12-05 08:48:01

12

您可以使用:

rake db:test:clone 

要开发数据库复制到测试。

+13

根本不适用于我。结构已创建,但没有记录被复制。该任务是否需要复制数据?描述并不直接指出。 – mdrozdziel 2010-04-15 12:56:20

+1

它没有为我工作。测试数据库似乎是空的... – 2011-06-15 19:44:48

+9

db:test:clone是db:schema:dump和db:test:prepare的组合,并且实际上并不复制* data * – JohnMetta 2012-07-23 17:35:03

4

如果你只是想克隆的发展DB的全部,这有什么错只是复制development.sqlite3和重命名test.sqlite3?您可以通过设置可从命令行运行的批处理文件(或您的操作系统上的等效文件)来自动执行此过程。

这将在本地工作,但我只是意识到你可能会想到一个非本地环境,在这种情况下,它可能不会。

3

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

首先,添加rake任务,例如以LIB /任务/ test_seed.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 
+0

如果你在rake db:seed之后运行'rake db:test:prepare' '它会删除你的种子数据=] – professormeowingtons 2013-07-02 20:43:52

5

对于所有的数据库:

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

ops,我以为你想用seed.rb文件填充测试数据库。 – drr 2012-01-04 13:20:33

+2

更新此为他想要的? – dove 2012-10-26 07:32:52

3

在Postgres,复制数据库,像这样:

创建模板originaldb DATABASE NEWDB OWNER dbuser;

相关问题