Подтвердить что ты не робот

Require lib в RSpec с Ruby 1.9.2 приносит "нет такого файла для загрузки"

Я пытаюсь обновить один из моих проектов Rails до Ruby 1.9.2. Все прошло неплохо, но один тест RSpec сломался. В этом тесте я require a 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/[email protected]/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.

4b9b3361

Ответ 1

Путь загрузки в 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'

Ответ 2

В RSpec 2.x каталог lib автоматически добавляется в путь загрузки (см. RSpec-Core # get_started).

Таким образом, вы можете просто использовать require 'services/my_lib' в вашем файле spec.

Ответ 3

Если ваша спецификация находится 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 должен загружать все это для вас.

Ответ 4

Попробуйте указать путь вручную

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

а затем добавьте библиотеку, подобную этой

require 'my_lib.rb'