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

Rails: как проверить код в каталоге lib/?

У меня есть модель, которая получает свои данные из объекта парсера. Я думаю, что класс парсера должен жить в каталоге lib/(хотя меня можно убедить в том, что он должен жить в другом месте). Вопрос в следующем: где должен проходить мой модуль для класса парсера? И как я могу гарантировать, что они будут выполняться каждый раз, когда я запускаю тест рейка?

4b9b3361

Ответ 1

В приложении Rails, над которым я работаю, я решил просто разместить тесты в каталоге test\unit. Я также создам их в каталоге module/, например:

lib/a.rb   => test/unit/a_test.rb
lib/b/c.rb => test/unit/b/c_test.rb

Для меня это был путь последнего сопротивления, поскольку эти тесты выполнялись без каких-либо других изменений.

Ответ 2

Здесь один из способов:

Создайте lib/tasks/test_lib_dir.rake со следующими

namespace :test do

  desc "Test lib source"
  Rake::TestTask.new(:lib) do |t|    
    t.libs << "test"
    t.pattern = 'test/lib/**/*_test.rb'
    t.verbose = true    
  end

end

Подмените структуру вашего lib dir в директории test, заменив код lib соответствующими тестами.

Запустите rake test:lib, чтобы запустить тесты lib.

Если вы хотите, чтобы все тесты запускались при вызове rake test, вы можете добавить следующее в свой новый файл рейка.

lib_task = Rake::Task["test:lib"]
test_task = Rake::Task[:test]
test_task.enhance { lib_task.invoke }

Ответ 3

Я хотел сделать то же самое, но с rspec и autospec, и потребовалось немного копания, чтобы выяснить, где они получают список каталогов/шаблонов файлов, которые диктовали запуск тестовых файлов. В конечном итоге я нашел это в lib/tasks/rspec.rake: 86

  [:models, :controllers, :views, :helpers, :lib, :integration].each do |sub|
    desc "Run the code examples in spec/#{sub}"
    Spec::Rake::SpecTask.new(sub => spec_prereq) do |t|
      t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
      t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
    end
  end

Я поместил свои тесты в новый каталог spec/libs, когда файл rpsec.rake был настроен для просмотра в spec/lib. Просто переименование libs → lib сделал трюк!

Ответ 4

Простым и понятным способом является создание каталога под тестом /unit/lib. Затем создайте тест как test/unit/lib/foo_test.rb, соответствующий lib/foo.rb. Никаких новых задач рейка не требуется, и вы можете вложить больше каталогов, если это необходимо, чтобы соответствовать структуре каталога lib.

Ответ 5

От Rails 4.0:

rake test:all         # Run all tests in any subdir of `test` without resetting the DB
rake test:all:db      # Same as above and resets the DB

Как Rails 4.1, переопределите test:run, чтобы включить дополнительные задачи при запуске rake или rake test:

# lib/tasks/test.rake

namespace :test do
  Rake::Task["run"].clear
  task run: ["test:units", "test:functionals", "test:generators", "test:integration", "test:tasks"]

  ["tasks"].each do |name|
    Rails::TestTask.new(name => "test:prepare") do |t|
      t.pattern = "test/#{name}/**/*_test.rb"
    end
  end
end

У этого есть дополнительный бонус определения rake test:tasks в данном примере.

От Rails 4.2, test:run включает все поддиры test, включая их при запуске rake test, и, таким образом, rake.

Ответ 6

Чтобы не определять дополнительные задачи рейка для запуска тестов из пользовательских определенных папок, вы также можете запустить их с помощью команды rake test:all. Структура папок тестов для папки lib или любой другой пользовательской папки зависит от вас. Но я предпочитаю дублировать их в классах: lib соответствует test/lib, app/form_objects - test/form_objects.

Ответ 7

Использование:

[spring] rake test:all

для запуска всех тестов, включая созданные вами каталоги (например, [root]/test/lib/).

Опустить [spring], если tou не использует его.