Ответ 1
Как вы это сделали - require 'parser'
является рекомендуемым способом. RSpec помещает lib
в $LOAD_PATH
, так что вы можете потребовать файлы по отношению к нему, как и вы.
У меня есть тест, который пытается протестировать класс, расположенный в папке lib.
Сейчас я делаю это в своем parser_spec.rb
require 'spec_helper'
require 'parser' --> Because my class is /lib/parser.rb
describe "parser" do
it "needs a url to initialize" do
expect { Parser.new }.to raise_error(ArgumentError)
end
end
Каким будет правильный способ включить все файлы lib, чтобы они находились в рамках тестов rspec?
Как вы это сделали - require 'parser'
является рекомендуемым способом. RSpec помещает lib
в $LOAD_PATH
, так что вы можете потребовать файлы по отношению к нему, как и вы.
Try this
require_relative "../../lib/parser.rb"
or
require 'lib/parser.rb'
rspec автоматически загружает spec/spec_helper.rb при его запуске, а также автоматически добавляет в него папку "lib" LOAD_PATH, поэтому ваши запросы в "lib/parser.rb" видны и требуются должным образом.
Чтобы избежать lib
автозагрузки, как сказал Райан Бигг, вы можете автозагрузить пользовательский каталог, размещенный в корне приложения:
В список /your/config/application.rb вы можете добавить:
config.autoload_paths += %W(#{config.root}/my_stuff)
Затем вы можете сделать:
require 'spec_helper'
describe Parser do
#your code...
end
Возможно, вы можете поместить свой класс внутри модуля, чтобы избежать столкновений:
class MyStuff::Parser
#your code...
end
Затем вы можете сделать:
require 'spec_helper'
describe MyStuff::Parser do
#your code...
end
Просто поместите папку 'lib' в autoload_path. Например, в application.rb
config.autoload_paths += "#{Rails.root}/lib/"
Тогда вы можете сделать это обычно
require 'spec_helper'
describe Parser do
...
end