Understanding how DB migrations are applied to test databases

Hi. I am a new Rails developer. So far my experiences with the
framework has been very positive, and I'm excited to become a part of
Rails dev community.

I've started working on my first Rails application, and ran into
something that confused me regarding how db migrations are applied to
test databases. What I am trying to do is create a static lookup table
for certain parameters in my database. To do this, I created two
migrations:

create_car_table.rb
populate_car_table.rb

where the populate migration simply adds an array of values to the
rows in the database. These migrations work and the database is
populated as I expect.

So my next development activity was to write a simple unit test for
this lookup table - one that verified things such as the number of
cars in the table, the number of cars of a certain color, etc. I went
and ran:

rake test:units

And my tests fail. When I examine the test database, I see the cars
table created, but not populated (i.e., it appears that the create
migration was executed, but not the populate).

Setting RAILS_ENV to test and running the migration populates the test
database, but doesn't solve my test issue, as when I run rake
test:units, it appears to overwrite what I've done. I ran:

rake test:units --trace

And it I see something like this:

** Invoke test:units (first_time)
** Invoke db:test:prepare (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:clone (first_time)
** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:clone
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:units

I assume these commands are undoing the migrations I ran on the test
database (based on the first_time indicators as well as the clone/
purge).

So my questions are - what is the right recipe for creating and
testing lookup tables in Rails? Should I be using fixtures for this,
or is there something simple I am missing with how I should run and
test my migrations using the test database?

Thanks for any help.

Hi. I am a new Rails developer. So far my experiences with the
framework has been very positive, and I'm excited to become a part of
Rails dev community.

I've started working on my first Rails application, and ran into
something that confused me regarding how db migrations are applied to
test databases.

They're not. The current schema (schema.rb or development.sql) is loaded into an empty database.

So my questions are - what is the right recipe for creating and
testing lookup tables in Rails? Should I be using fixtures for this,
or is there something simple I am missing with how I should run and
test my migrations using the test database?

If you need data in your test database then fixtures are usually the way to go.

Fred