如何使用旧版本的rspec-core运行rspec

时间:2014-09-28 17:25:55

标签: ruby-on-rails bundler

当我运行rspec时,我收到此错误消息

/Users/umezo/.rvm/gems/ruby-2.1.1@itsonme/gems/bundler-1.6.1/lib/bundler/runtime.rb:34:in `block in setup': You have already activated rspec-core 2.14.8, but your Gemfile requires rspec-core 2.13.1. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)

我确实在我的gemfile中指定了rspec-core 2.13.1 ...

gem "rspec-rails", "~> 2.13.0"

我确实有多个版本的rspec和rspec核心,因为gem list rspec返回...

*** LOCAL GEMS ***

guard-rspec (4.2.8, 3.1.0, 1.2.1)
rspec (2.14.1, 2.13.0, 2.5.0)
rspec-core (2.14.8, 2.13.1)
rspec-expectations (2.14.5, 2.13.0, 2.5.0)
rspec-mocks (2.14.6, 2.13.0, 2.5.0)
rspec-rails (2.14.2, 2.13.0, 2.5.0)

我知道解决这个问题的三种方法是:1)在bundle exec前加上命令; 2)将Gemfile中的rspec升级到2.14.8;或3)去除rspec / rspec-core 2.14.1 / 8。

但是,我想知道默认情况下如何运行rspec 2.13.0,而不删除rspec 2.14.1 。 我知道这是可能的,因为我可以在我的其他OSX机器上执行此操作,该机器也具有相同的两个版本的rspec,以及gemfile中指定的相同版本的rspec。是否有一个特定的配置文件,bundler / rails / rspec会查看以确定要运行哪个版本的rspec?

编辑: 这是我的配置中的更多内容。

System OSX Mavericks
Ruby 2.1.1p76
rvm 1.25.31    
Bundler 1.6.1
Rails 4.1.0

1 个答案:

答案 0 :(得分:0)

在查看RubyGems生成的rspec可执行文件时发现了这个:

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/
    version = $1
    ARGV.shift
  end
end

gem 'rspec-core', version
load Gem.bin_path('rspec-core', 'rspec', version)

这意味着我们可以这样做:

rspec _2.99.2_ ./spec/workers/base_worker_spec.rb