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

时间:2012-08-28 12:38:54

标签: ruby-on-rails rspec rake

我在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”仍然像以前一样工作。

很困惑......

3 个答案:

答案 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命令。

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