12

我在 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。以前我按照“The RSpec Book”(p328)进行了设置,其中描述了将 rspec gem 放入“group :development, :test”块中。在阅读了其他一些 SO 帖子后,我删除了 ":development" 并做了一个捆绑。现在“rake spec”什么都不做。“rspec”仍然像以前一样工作。

很困惑...

4

3 回答 3

9

尝试运行RAILS_ENV=test rake spec

于 2012-10-23T22:54:24.490 回答
3

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

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

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

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

于 2014-01-23T17:22:01.237 回答
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
于 2013-04-11T21:49:19.440 回答