[Feature Request] Force test schema to be up to date when running tests

Every so often I’ll run a test suite and it will have a large number of failures. After debugging it’s normally something as simple as the test schema being out of date. I then run bin/rake db:test:prepare and everything is fine.

If I run my development environment and my schema is out of date, it throws an error and forces me to run bin/rake db:migrate. Should we be doing the same thing when we’re running tests? Or at the very least maybe throwing a warning that the test schema is ‘out of date’?

On one of the first apps I was building (a few years ago) I remember spending a few hours tracking down why my test was failing. I was new to ‘TDD’ and I thought it was something I was doing wrong. I called a friend and he asked ‘did you run db:test:prepare?’ and that solved my problem. I don’t run into this issue as much anymore, but I think it might prevent some frustration by new rails users.

I’m trying to think of why we wouldn’t be doing this and my mind is coming up blank. Let me know your thoughts!



+1, this is one of a few things that doesn’t “work out of the box” for databases in real-world usage. I always end up having some version of a custom “db:prepare” which does extra necessary things for my apps.

FYI, this thread is somewhat related, in that it’s also about confusion about the behavior of the ‘test’ environment (and also unaddressed): https://groups.google.com/forum/#!searchin/rubyonrails-core/environment$20agnostic/rubyonrails-core/kqKoJHcQu9U/xx9J2BLOBgAJ

– Chad

Automatic test schema maintainance is a feature of Rails since 4.1 http://guides.rubyonrails.org/4_1_release_notes.html#railties-notable-changes

Ah. My problems may be that I don’t generate that test helper by default, and thus the call never makes it into my rspec setup.

Is this your issue Ryan? If so maybe you can confirm that the rspec generator properly adds this support, and if not, add it.

– Chad