QA@IT

RSpecが実行できない

4973 PV

現在MacOsで、RSpecをインストールしてテストを実行しようとしているのですが、うまく動作しません。

具体的にインストールからエラーが出力されるまでの過程を、書かせていただきます。

  • 1. インストール
gem install rspec
  • 2. $ rspec -v
2.11.1
  • 3. $ rspec
/Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load': cannot load such file -- /Users/lain/spec (LoadError)
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `block in load_spec_files'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `map'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:22:in `run'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:69:in `run'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:8:in `block in autorun'
  • 4. $ rspec hoge.rb(hoge.rbは空)
/Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/bundler-1.1.5/lib/bundler/resolver.rb:287:in `resolve': Could not find gem 'rspec (= 1.3.2) ruby' in the gems available on this machine. (Bundler::GemNotFound)
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/bundler-1.1.5/lib/bundler/resolver.rb:161:in `start'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/bundler-1.1.5/lib/bundler/resolver.rb:128:in `block in resolve'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/bundler-1.1.5/lib/bundler/resolver.rb:127:in `catch'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/bundler-1.1.5/lib/bundler/resolver.rb:127:in `resolve'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/bundler-1.1.5/lib/bundler/definition.rb:192:in `resolve'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/bundler-1.1.5/lib/bundler/definition.rb:127:in `specs'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/bundler-1.1.5/lib/bundler/environment.rb:27:in `specs'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194@global/gems/rubygems-bundler-1.0.3/lib/rubygems-bundler/noexec.rb:41:in `candidate?'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194@global/gems/rubygems-bundler-1.0.3/lib/rubygems-bundler/noexec.rb:60:in `setup'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194@global/gems/rubygems-bundler-1.0.3/lib/rubygems-bundler/noexec.rb:75:in `<top (required)>'
    from /Users/lain/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
    from /Users/lain/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
    from /Users/lain/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
    from /Users/lain/.rvm/gems/ruby-1.9.3-p194/bin/ruby_noexec_wrapper:9:in `<main>'
  • 5. $ rspec(3と同じコマンド)
/Users/lain/.rvm/gems/ruby-1.9.3-p194/gems/bundler-1.1.5/lib/bundler/resolver.rb:287:in `resolve': Could not find gem 'rspec (= 1.3.2) ruby' in the gems available on this machine. (Bundler::GemNotFound)
………4 と同じ内容のエラー

以下は所感です。
まず3のエラーで/Users/lain/spec を探しにいってるのが不思議です。rspecはinstallした際にhomeディレクトリに何かファイルを作成するのでしょうか?
つぎに5のエラーも不思議です。3と同じコマンドを打ってるにも関わらず、4のコマンドを実行した後はエラー内容がかわっています。

何かお気づきの点があればご指摘いただけると幸いです。

回答

rspec は引数にファイル名かディレクトリ名を必要とします。
何も指定しなかった場合は spec ディレクトリを探そうとします。
なので、3 の cannot load such file -- /Users/lain/spec (LoadError) のエラーは、引数に何も指定されず、spec ディレクトリも無かったためです。

4, 5 のエラーはわからないのですが、bundler で動こうとしているようなので、3 の時と何かの環境が異なるんじゃないでしょうか。カレントディレクトリが異なるとか。

なお、rspec はカレントディレクトリかホームディレクトリにある .rspec ファイルを参照します。

編集 履歴 (0)
  • お返事ありがとうございます。
    引数を渡さないとデフォルトで、読みにいくんですね。
    4.5は環境を変えると実行できるようになりました。
    -

tmtmsさんが殆ど答えてくれていますが、4, 5のエラーはカレントディレクトリにあるGemfileの中で使用するrspecのバージョンを固定しているのが原因かと思います。
Gemfileにgem 'rspec', '>= 1.3.2'と書くとインストール済みのrspecの中からもっとも新しいrspecが使われますが、gem 'rspec', '1.3.2'gem 'rspec', '~>1.3.2'など、使用バージョンを限定した書き方もできるようになっています。
後者の場合だと、rspecの2.11.1が入っていても、それを使用せずに1.3.2や1.3.x系を探しに行くため、4や5のエラーが出るのではないかと。

なお、Gemfileを更新した場合、bundle installでは既にインストールされているgem関連が(Gemfileの表記によっては)更新されない為、今回の場合はbundle updateの方が確実かと思います。

編集 履歴 (0)
  • なるほど、別のファイルを読みにいっていたのですね。ありがとうございます。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。