I am on Rails 3.2 and I am using rspec (2.11.1). When I run my test suite with "rake spec" I get failures. When I run it with "rspec" everything passes. I've seen other mentions of this problem but nothing definitive that explains what is going on and what best practices are.
If I do "rake spec" or "rake tmp:clear && rake spec" my tests fail.
If I do "rspec" or "rspec spec" or "rake db:test:prepare && rspec" my tests pass.
I thought the only difference was that rake did "db:test:prepare" but if I do that manually before running rspec my tests pass so that can't be all of the story.
After doing a bit of reading I changed my Gemfile. Previously I had it set up as per "The RSpec Book" (p328) where it described putting the rspec gem inside a "group :development, :test" block. Having read some other SO posts I removed ":development" and did a bundle. Now "rake spec" does nothing. "rspec" still works as before.
Very confused...
Here's what fixed it for me. I too was able to run
rake spec RAILS_ENV=test
I had my Gemfile like thisI changed it to this, making a block for test and development and putting it before the development state. I also made sure my db migrations had all made it into the test db.
db:migrate RAILS_ENV=test
According to rspec-rails github, put rspec-rails gem in the development and test groups of the Gemfile. This is because the test rake task loads development environment first before switching to test environment.
Also, if you're using Gemfile, use "bundle exec rake spec" to run all your specs. To run single spec file, use "bundle exec rake rspec path/to/spec_file". Using "bundle exec" ensures you're using the correct rake command installed via your Gemfile instead of your system rake command.
Reference: https://github.com/rails/rails/issues/8591
Try running
RAILS_ENV=test rake spec