Migrate Your Tests
Rails has a nice way of maintaining versions of your database schema through ActiveRecord:Migration. This lets you modify your existing schema without the hassle of manually copying the same schema to all the different deployed instances that you have, and does this automatically for you.
When I usually change the schema, I usually drop all the tables and recreate them using:
rake db:migrate VERSION=0
rake db:migrate
and then repopulate my development DB environment using a script I use. However it turns out that this doesn’t migrate your test environment automatically with it. I tried creating a simple test of making sure that my ActiveRecord validation works. However, I ended up getting this error:
test_numericality_group_limit(AssignmentTest):
NoMethodError: undefined method `group_limit=' for #<Assignment:0xb7242018>
/var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/attribute_methods.rb:251:in `method_missing'
test/unit/assignment_test.rb:11:in `test_numericality_group_limit'
/var/lib/gems/1.8/gems/activesupport-2.1.0/lib/active_support/testing/setup_and_teardown.rb:33:in `__send__'
/var/lib/gems/1.8/gems/activesupport-2.1.0/lib/active_support/testing/setup_and_teardown.rb:33:in `run'
After hours of finding the bug, I found out that you have to migrate your test DB environment as well, by executing the following:
rake db:schema:dump
rake db:test:prepare
This will copy the schema that you have right now in your development environment, and copy it to your test environment.