我应该使用“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