【问题标题】:Should I use "rake spec" or "rspec" (can't get "rake spec" to work)?我应该使用“rake spec”还是“rspec”(不能让“rake spec”工作)?
【发布时间】:2012-08-22 23:15:58
【问题描述】:

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

很迷茫……

【问题讨论】:

  • 做了一些进一步的探索。根据 rspec 书(带有:development,:test)的 Gemfile,运行 rspec 使用“测试”环境,而 rake 规范使用“开发”环境。现在不知道为什么会这样,但会继续寻找......
  • "RAILS_ENV='test' rake spec" 有效。我本来希望测试默认为测试环境,而不必具体说明...
  • 我的答案已被删除(由@bhargav-rao 提供)与stackoverflow.com/questions/15701298/… 重复

标签: ruby-on-rails rspec rake


【解决方案1】:

尝试运行RAILS_ENV=test rake spec

【讨论】:

  • AFAIK 这不好,因为rake spec 会在某个时候调用db:schema:load,如果您以这种方式设置环境,它会尝试将模式从test 加载到test
【解决方案2】:

这是为我解决的问题。 我也能跑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

我把它改成了这个,为测试和开发制作了一个块,并将它放在 before 开发状态。我还确保我的数据库迁移已全部进入测试数据库。 db:migrate RAILS_ENV=test

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

【讨论】:

  • hmm ...除了原始 Gemfile 中“development”的拼写错误之外,它们在功能上是相同的?这将导致 rspec 无法加载(静默失败)。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2014-06-26
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多