如何将 rspec 升级到我的 Rails 项目中的特定版本?

How do I upgrade rspec to a specific version in my Rails project?

我正在使用 Rails 4.2.10。我有以下版本的规格…

$ bin/rspec --version
/Library/Ruby/Gems/2.6.0/gems/bundler-1.17.3/lib/bundler/rubygems_integration.rb:200: warning: constant Gem::ConfigMap is deprecated
3.4.4

在我的 Gemfile 中,我有

rspec (3.4.0)
  rspec-core (~> 3.4.0)
  rspec-expectations (~> 3.4.0)
  rspec-mocks (~> 3.4.0)
…
rspec-rails (3.4.2)
  actionpack (>= 3.0, < 4.3)
  activesupport (>= 3.0, < 4.3)
  railties (>= 3.0, < 4.3)
  rspec-core (~> 3.4.0)
  rspec-expectations (~> 3.4.0)
  rspec-mocks (~> 3.4.0)
  rspec-support (~> 3.4.0)
rspec-support (3.4.1)

如何将规范升级到特定版本(我想要 3.10.0)。我尝试将 Gemfile.lock 版本更改为

rspec (3.10.0)
  rspec-core (~> 3.4.0)
  rspec-expectations (~> 3.4.0)
  rspec-mocks (~> 3.4.0)

然后重新运行“bundle install”,但是查看bin/rspec的版本还是显示“3.4.4”。

编辑: 回应评论中给出的答案...

尝试将我的 Gemfile“spec-rails”依赖项更改为

gem 'rspec-rails', '~> 3.9.1'

然后是下面的 运行 但我想有一系列的依赖关系导致下面的事情

$ bundle install
…
deprecated
Fetching gem metadata from https://rubygems.org/........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies........
Bundler could not find compatible versions for gem "rspec-support":
  In snapshot (Gemfile.lock):
    rspec-support (= 3.4.1)

  In Gemfile:
    guard-rspec was resolved to 4.6.4, which depends on
      rspec (>= 2.99.0, < 4.0) was resolved to 3.10.0, which depends on
        rspec-mocks (~> 3.4.0) was resolved to 3.4.1, which depends on
          rspec-support (~> 3.4.0)

    rspec-rails (~> 3.9.1) was resolved to 3.9.1, which depends on
      rspec-support (~> 3.9.0)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

不太确定如何进行升级。

升级所有提到的 gem,并且可能与其所需的 RSpec 版本冲突。输出告诉您,guard-rspec 与较新的 RSpec-version 发生冲突。尝试:

bundle update rspec rspec-rails guard-rspec

如果新 Gems 出现另一个错误,请尝试将它们也添加到命令中。 Gemfile 中未列出的传递依赖项通常不需要列出(rspec-mocks 等)。

总结:尝试一次升级所有相关的有问题的宝石。

此外,正如 Les 所说,您不应该手动更新 Gemfile.lock(合并冲突除外),而只能通过 bundle update [GEMNAME].

删除 Gemfile.lock 是最后的手段,因为您将失去当前可能运行良好的依赖情况,并立即将所有 Gem 升级到 Gemfile 中指定的最新版本。