15

Rails プロジェクトの 1 つを にアップグレードしようとしていますRuby 1.9.2。すべてうまくいきましたが、1 つの RSpec テストで問題が発生しました。このテストではrequire、Ruby lib:

# file spec/models/my_lib_spec.rb
require 'spec_helper'
require 'lib/services/my_lib'

describe "MyLib" do

  it "should do something" do
...

ライブラリは次のようになります。

# file lib/services/my_lib.rb
class MyLib

  def self.do_something
  ...

Ruby 1.8.7 (REE) では、テストはうまくいきました:

$ ruby -v   
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin11.1.0], MBARI 0x6770, Ruby
Enterprise Edition 2011.03
$ rspec ./spec/models/my_lib_spec.rb
..

Finished in 1.4 seconds
2 examples, 0 failures

Ruby 1.9.2 ではエラーが発生しno such file to loadます:

$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0]
$ rspec ./spec/models/my_lib_spec.rb
/Users/tmangner/.rvm/gems/ruby-1.9.2-p290@madgoal/gems/activesupport-
3.2.2/lib/active_support/dependencies.rb:251:in `require': no such file
to load -- lib/services/my_lib (LoadError)

Ruby 1.9がlibを見つけられない理由はわかりません。

4

4 に答える 4

25

ruby 1.9 のロード パスは、1.8 とまったく同じようには機能しません。

プロジェクトのルート ディレクトリをロード パスに追加する必要があります。

これを行うには、次のように rspec を実行します。

rspec -I . ./spec/models/tipp_remember_spec.rb

...または、ロードパスに手動で追加することによってspec_helper.rb(これをspec_helper.rb

$:<< File.join(File.dirname(__FILE__), '..')

rspec はデフォルトでローカルlibディレクトリもロード パスに追加すると思うので、require 行を次のように書き換えることができるかもしれません。

require 'services/my_lib'
于 2012-07-07T16:39:42.597 に答える
6

RSpec 2.x では、libディレクトリは自動的にロード パスに追加されます ( RSpec-Core#get_startedを参照)。

したがってrequire 'services/my_lib'、スペックファイルで使用できます。

于 2013-01-26T20:12:18.347 に答える
4

仕様が見つかりspec/models/my_lib_spec.rb、テストしたい場合lib/services/my_lib.rbは、仕様に lib ファイルへのアクセス方法を伝えるだけです。

require 'spec_helper'
require_relative '../../lib/services/my_lib'

describe "MyLib" do

  it "should do something" do

最終的な注意: spec_helper をインクルードしているため、依存関係へのすべてのパスを指定する必要は通常ありません。Rails がこれらすべてをロードする必要があるからです。

于 2012-07-07T17:26:57.450 に答える
1

パスを手動で定義してみてください

$LOAD_PATH << './lib/services/'

そして、このようにライブラリを追加します

require 'my_lib.rb'
于 2012-07-07T16:45:18.217 に答える