我在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”块中。阅读了其他一些SO帖子后,我删除了“:development”并做了一个捆绑。现在“rake spec”什么都不做。 “rspec”仍然像以前一样工作。
很困惑......
答案 0 :(得分:9)
尝试运行RAILS_ENV=test rake spec
答案 1 :(得分:3)
这是为我修复它的原因。
我也能够运行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
答案 2 :(得分:3)
根据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而不是系统rake命令安装的正确rake命令。