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.
Ответы
Ответ 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'