ProblemTo unit test your application, you need a test database with a schema identical to that of your development database. Your unit tests run against this test database, leaving your development and production databases unaffected. You want to set up the database so that it is in a known state at the start of every test. SolutionUse Rake's db:test:clone_structure task to create a test database from the schema of your existing development database.
Assume you've created a development database from the following Active Record migration: db/migrate/001_build_db.rb: class BuildDb < ActiveRecord::Migration def self.up create_table :countries do |t| t.column :code, :string t.column :name, :string t.column :price_per_usd, :float end Country.create :code => 'USA', :name => 'United States of America', :price_per_usd => 1 Country.create :code => 'CAN', :name => 'Canada', :price_per_usd => 1.1617 Country.create :code => 'GBR', :name => 'United Kingdom', :price_per_usd => 0.566301 create_table :books do |t| t.column :name, :string t.column :isbn, :string end Book.create :name => 'Perl Cookbook', :isbn => '957824732X' Book.create :name => 'Java Cookbook', :isbn => '9867794141' end def self.down drop_table :countries drop_table :books end end Run the db:test:clone_structure rake task with the following command: ~/project$ rake db:test:clone_structure DiscussionBefore you run db:test:clone_structure, your test database exists but contains no tables or data: mysql> use cookbook_test Database changed mysql> show tables; Empty set (0.00 sec) After the schema is cloned, your test database contains the same table structure as your development database: mysql> show tables; +-------------------------+ | Tables_in_cookbook_test | +-------------------------+ | books | | books_countries | | countries | +-------------------------+ 3 rows in set (0.00 sec) The newly created tables don't contain any data yet. The test database is to be loaded with data from fixtures. The idea is that the data loaded from fixtures is fixed, and operations on that data can be compared with expected results with assertions. See Also
|