2015-06-24 96 views
1

我試圖從「RSpec Book」中做「hello rspec」示例,並且rspec抱怨它找不到「rails_helper」。它不會抱怨在應用程序特定的gemset中安裝rspec的rails應用程序目錄。對於hello,Rails沒有安裝在rvm GEM_PATH的兩個gemsets中。非Rails項目中的RSpec正在尋找rails_helper - 爲什麼?

我使用rspec --init設置了hello目錄。

我很困惑,因爲這不是Ruby On Rails項目。我無法弄清楚rspec被告知需要rails_helper。我會很感激任何建議。謝謝!

**利

Mingus:hello $ rspec 
    /Users/leigh/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- rails_helper (LoadError) 
     from /Users/leigh/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/configuration.rb:1283:in `block in requires=' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/configuration.rb:1283:in `each' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/configuration.rb:1283:in `requires=' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/configuration_options.rb:109:in `block in process_options_into' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/configuration_options.rb:108:in `each' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/configuration_options.rb:108:in `process_options_into' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/configuration_options.rb:21:in `configure' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/runner.rb:101:in `setup' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/runner.rb:88:in `run' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/runner.rb:73:in `run' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib/rspec/core/runner.rb:41:in `invoke' 
     from /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/exe/rspec:4:in `<top (required)>' 
     from /Users/leigh/.rvm/gems/[email protected]/bin/rspec:23:in `load' 
     from /Users/leigh/.rvm/gems/[email protected]/bin/rspec:23:in `<main>' 
     from /Users/leigh/.rvm/gems/[email protected]/bin/ruby_executable_hooks:15:in `eval' 
     from /Users/leigh/.rvm/gems/[email protected]/bin/ruby_executable_hooks:15:in `<main>' 

這裏有路徑從/Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/瓦爾LIB/rspec的/核心/ configuration.rb:1283:在`塊在需要=」

# @private 
    def requires=(paths) 
    directories = ['lib', default_path].select { |p| File.directory? p } 
    RSpec::Core::RubyProject.add_to_load_path(*directories) 
    STDERR.puts "paths ------>> #{paths}" 
    STDERR.puts "default_path ------>> #{default_path}" 
    STDERR.puts "$LOAD_PATH ------>> #{$LOAD_PATH}" 
    paths.each { |path| require path } 
    @requires += paths 
    end 

    paths ------>> ["spec_helper", "rails_helper", "spec_helper"] 
    default_path ------>> spec 
    $LOAD_PATH: 
    /Users/leigh/Programming/wapp_dev/hello/spec 
    /Users/leigh/.rvm/gems/[email protected]/gems/executable-hooks-1.3.2/lib 
    /Users/leigh/.rvm/gems/[email protected]/extensions/x86_64-darwin-14/2.2.0-static/executable-hooks-1.3.2 
    /Users/leigh/.rvm/gems/[email protected]/gems/bundler-unload-1.0.2/lib 
    /Users/leigh/.rvm/gems/[email protected]/gems/rubygems-bundler-1.4.4/lib 
    /Users/leigh/.rvm/gems/[email protected]/gems/bundler-1.10.3/lib 
    /Users/leigh/.rvm/gems/[email protected]/gems/rspec-support-3.3.0/lib 
    /Users/leigh/.rvm/gems/[email protected]/gems/rspec-core-3.3.1/lib 
    /Users/leigh/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0 
    /Users/leigh/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/x86_64-darwin14 
    /Users/leigh/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby 
    /Users/leigh/.rvm/rubies/ruby-2.2.1/lib/ruby/vendor_ruby/2.2.0 
    /Users/leigh/.rvm/rubies/ruby-2.2.1/lib/ruby/vendor_ruby/2.2.0/x86_64-darwin14 
    /Users/leigh/.rvm/rubies/ruby-2.2.1/lib/ruby/vendor_ruby 
    /Users/leigh/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0 
    /Users/leigh/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/x86_64-darwin14 
 
~/.rspec: 
    --color 
    --format documentation 
    --require spec_helper 
    #--require rails_helper 
 
hello/.rspec: 
    --color 
    --require spec_helper 
 
hello/greeter_spec.rb: 
    describe "RSpec Greeter" do 
    it "should say 'Hello RSpec!' when it receives the greet() message" do 
     greeter = RSpecGreeter.new 
     greeting = greeter.greet 
     greeting.should == "Hello RSpec!" 
    end 
    end 
+0

必須在您的環境中的某個位置。開始挑選你的點文件和ENV變量尋找罪魁禍首。 –

回答

1

RSpec的具有several locations它聚合從選項(在最低所列最高優先級):

  • ~/.rspec
  • .rspec
  • .rspec-local
  • 命令行開關
  • SPEC_OPTS環境變量

我會仔細檢查所有的o那些。這可能看起來很愚蠢,但請確保您的~/.rspec文件已保存;對我自己做了這麼多次。此外,請停止所有預裝載程序,例如彈簧,警衛和spork。我還會檢查以確保你沒有意外地別名rspec(即檢查which rspecalias | grep rspec)。如果所有這些都失敗了,你可以看一下RSpec的內部結構(這是特定於你當前的版本,但可能適用於其他版本)。下面添加一個文件在您的項目,例如:trace_opts.rb

require 'rspec/core' 
module TraceOpts 
    def self.trace_options(opt) 
    name = opt.to_s.split('_').map(&:capitalize).join(' ') 
    define_method(opt) do |*args, &block| 
     super(*args, &block) { |opts| puts "#{name}: #{opts}" } 
    end 
    end 

    def self.trace_file(opt) 
    name = opt.to_s.split('_').map(&:capitalize).join(' ') 
    define_method(opt) do |*args, &block| 
     super(*args, &block).tap { |opts| 
     opts = opts ? File.expand_path(opts) : "No File Specified" 
     puts "#{name}: #{opts}" 
     } 
    end 
    end 

    trace_options :env_options 
    trace_options :command_line_options 
    trace_options :custom_options 
    trace_options :local_options 
    trace_options :project_options 
    trace_options :global_options 

    trace_file :custom_options_file 
    trace_file :project_options_file 
    trace_file :local_options_file 
    trace_file :global_options_file 
end 
RSpec::Core::ConfigurationOptions.prepend(TraceOpts) 
RSpec::Core::Runner.invoke 

然後用ruby trace_opts.rb運行它,它應該告訴你那裏的東西正在從加載。

編輯: RSpec讀取的選項文件被解析爲ERB文件。然後他們通過OptionParser餵食。設置可以在ERB解析級別使用ERB意見被忽略:

<%# --require rails_helper %> 

當行與Ruby明文#註釋掉它提供給選項解析器。取決於發生這種情況的位置可能會影響選項解析器的功能。在我嘗試的幾個排列中,評論選項被包含在files_or_directories_to_run中。在繼續之前,RSpec配置代碼會刪除該特定選項。

+0

謝謝你的回覆,亞倫。我做了至少兩次「忘記保存」的事情!但在這種情況下,我確實保存了。另外SPEC_OPTS沒有設置,也沒有命令行開關,只是簡單的'rspec'命令。 Rspec位於正確的gemset中,而不是別名。 – Leigh

+0

添加了一個簡短的腳本來幫助追查事情。 –

0

我現在知道#標記不是.rspec文件中的註釋指示符!

它表明〜/ .rspec包含了rails_helper,當我認爲#使它看不見的時候。刪除「# - 要求rails_helper」做了詭計!

感謝劇本,亞倫,並花時間幫忙!

** Leigh

相關問題