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.