Rake task to prepare test database from migrations
October 17th, 2006
To use your migrations for preparing test database create a file testdb.rake
in the directory lib/tasks.
Now add the following code in the lib/tasks/testdb.rake file…
module Rake
module TaskManager
def redefine_task(task_class, args, &block)
task_name, deps = resolve_args(args)
task_name = task_class.scope_name(@scope, task_name)
deps = [deps] unless deps.respond_to?(:to_ary)
deps = deps.collect {|d| d.to_s }
task = @tasks[task_name.to_s] = task_class.new(task_name, self)
task.application = self
task.add_comment(@last_comment)
@last_comment = nil
task.enhance(deps, &block)
task
end
end
class Task
class << self
def redefine_task(args, &block)
Rake.application.redefine_task(self, args, &block)
end
end
end
end
def redefine_task(args, &block)
Rake::Task.redefine_task(args, &block)
end
namespace :db do
namespace :test do
desc ‘Prepare the test database and migrate schema’
redefine_task :prepare => :environment do
Rake::Task['db:test:migrate_schema'].invoke
end
desc ‘Use the migrations to create the test database’
task :migrate_schema => ‘db:test:purge’ do
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])
ActiveRecord::Migrator.migrate(”db/migrate/”)
end
end
end
To prepare the test database from migrations run this command
$ rake db:test:migrate_schema
ajax, migrations, rake, tests

Thanks for this! You saved me a heck of a lot of trouble!
Awesome!! Thanks for sharing this. I would have wasted a lot of time writing this.
although its not mine… i got it from code snippets.
thanks.