-1

我正在使用 chruby 来管理我的 Ruby 版本,并使用 Bundler 的 binstubs 来避免输入“bundle exec”。我遇到了我不完全理解的问题。当我尝试在我们的 (Rails 4, Ruby 2.2.2) 应用程序中运行测试套件时,我得到了以下结果:

$ rspec             
/Users/duncanmalashock/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- simplecov (LoadError)
    from /Users/duncanmalashock/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /Users/duncanmalashock/ruby_projects/platform/spec/spec_helper.rb:3:in `<top (required)>'
    from /Users/duncanmalashock/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /Users/duncanmalashock/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /Users/duncanmalashock/ruby_projects/platform/spec/controllers/admin/admin_controller_spec.rb:1:in `<top (required)>'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1327:in `load'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1327:in `block in load_spec_files'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1325:in `each'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1325:in `load_spec_files'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:102:in `setup'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:88:in `run'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:73:in `run'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:41:in `invoke'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/exe/rspec:4:in `<top (required)>'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/bin/rspec:23:in `load'
    from /Users/duncanmalashock/.gem/ruby/2.2.2/bin/rspec:23:in `<main>'

当我运行$ bundle exec rspec时,套件运行正确。我一直在研究后现代的gem_home并安装了它,但它并没有给我我正在寻找的结果。我在 OSX Yosemite 上使用 zsh。

在 .zshrc 中:

source /usr/local/share/chruby/chruby.sh
source '/usr/local/share/chruby/auto.sh'
source /usr/local/share/gem_home/gem_home.sh

export PATH=./.bundle/bin:$PATH
alias b='bundle install --path .bundle/gems --binstubs .bundle/bin'
4

2 回答 2

2

只需在您的系统中安装simplecovgem(只需执行:)gem install simplecov并再次运行您的测试。它会起作用的。

bundle exec但是,使用运行 rake 或 rspec 命令是一种更好的做法。因为这样,您将确保该命令在您的Gemfile.

您可以将这些别名添加到您的.zshrc文件中:

alias ber="bundle exec rspec"
alias be="bundle exec"

然后像这样运行你的 rspec 测试:

ber

或者,

be rspec
于 2015-11-22T00:47:59.493 回答
0

您的问题是 bundler 已安装simplecov到项目的本地,并且您正在尝试运行系统 global rspec。这将simplecov在系统 ruby​​ 库位置中查找。使用 Ruby 语言版本管理器不会改变这种行为。它只会使用版本化 ruby​​ 的库位置。

如果您希望您的版本化 Ruby 一起使用rspecsimplecov那么您需要simplecov使用提供的任何等效工具安装在您的版本化 ruby​​ 中gem

我不确定你为什么会觉得跑步bundle exec很重要。.bashrc始终可以在或中创建别名.bash_profile。我有两个用于 bundle exec,一个是,另一个bebexec. 我也有bundle exec rails( brails) 和bundle exec rake( break) 的别名。在实践中,我发现这些与运行常规命令几乎没有什么不同。

于 2015-11-22T00:47:50.603 回答