Should I use “rake spec” or “rspec” (can't get “rake spec” to work)?

允我心安 提交于 2019-12-08 15:09:08

问题


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...


回答1:


Try running RAILS_ENV=test rake spec




回答2:


Here's what fixed it for me. I too was able to run rake spec RAILS_ENV=test I had my Gemfile like this

group :developmet do
    gem 'rspec-rails','2.9.0'
...
end
group :test do
    gem 'rspec-rails','2.9.0'
...
end

I 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

group :development,:test do
    gem 'rspec-rails','2.9.0'
        ...
end
group :development do
     ...
end



回答3:


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.

group :development, :test do
  gem 'rspec-rails'
end

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



来源:https://stackoverflow.com/questions/12159402/should-i-use-rake-spec-or-rspec-cant-get-rake-spec-to-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!