我应该使用“rake spec”还是“rspec”(不能让“rake spec”工作)?

我在Rails 3.2上,我正在使用rspec(2.11.1)。 当我使用“rake spec”运行我的测试套件时,我会失败。 当我用“rspec”运行时,一切都过去了。 我已经看到过这个问题的其他提及,但没有明确的解释正在发生的事情和最佳实践。

如果我做“rake spec”或“rake tmp:clear && rake spec”我的测试失败了。

如果我执行“rspec”或“rspec spec”或“rake db:test:prepare && rspec”,我的测试通过。

我认为唯一的区别是rake做了“db:test:prepare”,但是如果我在运行rspec之前手动执行,那么我的测试就会通过,所以这不是故事的全部内容。

做了一些阅读后,我改变了我的Gemfile。 之前我根据“RSpec Book”(p328)设置了它,它描述了将rspec gem放在“group:development,:test”块中。 阅读了其他一些SOpost后,我删除了“:development”并做了一个捆绑。 现在“rake spec”什么都不做。 “rspec”仍然像以前一样工作。

非常困惑…

尝试运行RAILS_ENV=test rake spec

这是为我修复它的原因。 我也能运行rake spec RAILS_ENV=test我有这样的Gemfile

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

我将其更改为此,为测试和开发创建一个块并将其置于开发状态之前 。 我还确保我的数据库迁移都已进入测试数据库。 db:migrate RAILS_ENV=test

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

根据rspec-rails github,将rspec-rails gem放在Gemfile的开发和测试组中。 这是因为测试rake任务在切换到测试环境之前首先加载开发环境。

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

此外,如果您正在使用Gemfile,请使用“bundle exec rake spec”来运行所有规范。 要运行单个spec文件,请使用“bundle exec rake rspec path / to / spec_file”。 使用“bundle exec”可确保您使用通过Gemfile而不是system rake命令安装的正确rake命令。

参考: https : //github.com/rails/rails/issues/8591