无法升级到RSpec 3

时间:2015-06-11 20:14:22

标签: rspec gem rspec-rails

我正在尝试将我的测试套件升级到RSpec 3.在阅读了如何操作的文档后,我遵循了所有步骤...我已升级到2.99.2并运行了transpec gem(太棒了!)我是留下一个弃用......这个:

`require 'rspec-expectations'` is deprecated. Use `require'rspec/expectations'` instead. Called from     /Users/kierancormack/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/bundler-1.8.3/lib/bundler/runtime.rb:76:in `require'.

我不明白我应该做什么。我已经改变了我的Gemfile看起来像这样但它只是抛出一个错误。我已经在spec_helper.rb中要求了它,但我似乎无法让它消失!

有人对如何处理此弃用有任何建议吗?

由于

1 个答案:

答案 0 :(得分:2)

RSpec 2.x提供了一个rspec/expectations文件,只需委托给require 'rspec/expectations'。但是,ruby社区中的一般约定是gem名称中的破折号对应于顶级文件名中的/ - 因此大多数ruby程序员都知道应该要求使用gem x-y x/y。作为我们的3.0弹簧清洁的一部分,我们删除了rspec-expectations文件,因为它是一个不需要的间接层。因此,您需要rspec/expectations而不是rspec-expectations

在您的情况下,堆栈跟踪使它看起来像在Bundler内发生require。当您使用Bundler.require时,它会尝试为Gemfile中的每个gem要求一个与gem名称匹配的文件。有good reasons to avoid Bundler.require但如果您要使用它,则此处的修复方法是将:require => "rspec/expectations"添加到gem 'rspec-expectations'中的Gemfile行。

实际上,如果您正在使用rspec-core(单独或通过rspec-rails),则根本不需要rspec/expectations; rspec-core会在适当的时候为您加载,因此您可以使用:require => false来阻止捆绑程序尝试使用它。

事实上,我们可以向前迈出一步:rspec-corerspec-rails都取决于rspec-expectations,因此您通常不需要rspec-expectations除非你正在做一些特别的事情(例如尝试使用github中的fork或HEAD),或者你自己在Gemfile或者rspec-core上使用它,否则你的rspec-rails rspec-expectations。因此,除非您有特定原因要在Gemfile中列出<appSettings> <key="Tax" value="5.8"/> </appSettings> ,否则我建议您将其删除。