mdrozdziel
mdrozdziel

Reputation: 5558

Rails - Populate test database with development data

Is there any trivial way to copy the data from developmenet database into the test one? I know theres a way to copy schema and recreate database, but is there any rake task to populate test database with development one?

Upvotes: 21

Views: 15316

Answers (6)

Ollie Glass
Ollie Glass

Reputation: 19993

With Postgres, copy the database like so:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

Upvotes: 6

drr
drr

Reputation: 97

For all databases:

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

Upvotes: 6

jaycode
jaycode

Reputation: 2958

An alternative method if you use seeds (db/seeds.rb)

First, add a rake task for example to lib/tasks/test_seed.rake with this code:

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

Then whenever you changed your database structure / content through migration and seeds, you can run

rake:db:test:prepare

To copy the schema and seed data.

So the complete steps would be:

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

Upvotes: 4

Jon
Jon

Reputation: 310

If you just want to clone the development DB in its entirety, what's wrong with just copying the development.sqlite3 and renaming it test.sqlite3? You can automate the process by setting up a batch file (or its equivalent on your OS) that you can run from the command line.

This will work locally, but I just realized you might be thinking a non-local environment, in which case it probably won't.

Upvotes: 4

ndp
ndp

Reputation: 21996

You can use mysql directly:

mysqldump app_development | mysql app_test

Upvotes: 17

Toby Hede
Toby Hede

Reputation: 37133

You can use:

rake db:test:clone

To copy the development db into test.

Upvotes: 14

Related Questions