Rails и MiniTest: добавьте дополнительную папку

Я использую Ruby 2 и Rails 4. У меня есть папка test/lib, где расположены несколько тестов. Но запуск rake test не использует их. Выполняются только другие тесты (модели, контроллеры,...).

Где мне нужно добавить папку lib?

Я уже пробовал MiniTest::Rails::Testing.default_tasks << 'lib', но получаю NameError Exception: uninitialized constant MiniTest::Rails. Я не добавлял миниатюрный камень в свой Gemfile, потому что Ruby 2 по умолчанию использует его.

Ответ 1

Чтобы использовать MiniTest::Rails::Testing.default_tasks << 'lib', вам нужно добавить драгоценный камень minitest-rails в свой Gemfile. Он отделен от Minitest и добавляет, что многие функции Minitest отсутствуют, которые по умолчанию не включены в Rails. И minitest-rails добавляет другие функции, такие как создание рейк-задач для всех каталогов, имеющих тесты. Поэтому без каких-либо изменений в вашем Rakefile вы можете запускать такие вещи:

$ rake minitest:lib

В качестве альтернативы, чтобы сделать это старомодным способом, вы можете добавить следующее в свой Rakefile:

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

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

Предполагается, что вы хотите запустить тесты lib без использования каких-либо элементов базы данных. Если вы хотите проводить измерения и транзакции базы данных, тогда вы должны создать задачу рейка с зависимостью от "test: prepare".

namespace :test do

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

end

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