Как запустить все тесты с помощью minitest?

Я загрузил исходный код для проекта, нашел ошибку и исправил ее.

Теперь я хочу запустить тесты, чтобы узнать, что я что-то сломал.

Тесты находятся в минимальном DSL.

Как мне запустить их сразу?

Я искал применимые задачи rake и т.д., но я не нашел их.

Ответ 1

Здесь ссылка на Rake:: TestTask.

На странице есть пример, чтобы вы начали.
Я отправлю еще один, который я использую прямо сейчас для драгоценного камня:

require 'rake/testtask'

Rake::TestTask.new do |t|
  t.pattern = "spec/*_spec.rb"
end

Как вы можете видеть, я предполагаю, что мои файлы находятся в /lib и что мои спецификации находятся в /spec и называются whatever_spec.rb

Надеюсь, что это поможет.

Ответ 2

Ответы на блокировки лучше, но я также хотел указать, что вы также можете запустить minitest непосредственно из команды, как с помощью команды ruby. Для запуска тестов в файле spec/calculator_spec.rb выполните:

$ ruby spec/calculator_spec.rb 

Не забудьте включить следующий код в файл calculator_spec.rb:

require 'minitest/spec'
require 'minitest/autorun'

Чтобы запустить все тесты в каталоге spec/, используйте следующую команду (см. это сообщение для более подробной информации Globbing не работает с Minitest - выполняется только один файл)

$ for file in spec/*.rb; do ruby $file; done 

Ответ 3

Это то, что Rake::TestTask работает под капотом, более или менее:

ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb

Примечание: lib и test/test*.rb (см. выше) являются значениями по умолчанию, но более типичны test и test/*_test.rb.

Источник: rake/testtask.rb в строке c34d9e0 169

Если вы используете JRuby и хотите не платить стоимость запуска дважды (один раз для Rake, а затем один раз для подпроцесса, который запускает Rake), просто используйте эту команду.

Ответ 4

Вот мой весь rakefile, который я поместил в свою верхнюю директорию:

task :default => :test
task :test do
  Dir.glob('./test/*_test.rb').each { |file| require file}
end

Чтобы запустить все мои тестовые файлы сразу, я просто набираю rake. Что это!

Убедитесь, что require 'minitest/autorun' находится в верхней части каждого из ваших файлов Minitest. Dir.glob определенно работает с Minitest.

Чтобы получить красивую, цветную версию Minitest с именами всех моих тестовых методов, у меня есть файл minitest_helper.rb в каталоге my/test. (Требуется установить миниатюрный репортер):

require 'minitest/reporters'
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
require 'minitest/autorun'

Мне просто нужно было require_relative './minitest_helper' в верхней части каждого из моих тестовых файлов.

Ответ 5

Это также можно сделать с помощью Makefile.

default:
  echo "Dir.glob('./test/*_test.rb').each { |file| require file}" | ruby

running make выполнит все ваши тесты.

Ответ 6

Другой способ сделать это, используя только стандартную библиотеку Ruby, - Dir.glob. Изнутри рубинового файла это будет выглядеть так:

require "minitest/autorun"

Dir.glob("**/*Test.rb") { |f| require_relative(f) }

Или из командной строки вы можете использовать эту команду:

ruby -I . -e "require 'minitest/autorun'; Dir.glob('**/*Test.rb') { |f| require(f) }"

Dir.glob('**/*Test.rb') рекурсивно ищет текущий каталог для любого файла, который соответствует *Test.rb, поэтому мы просто берем все эти файлы и require или require_relative их. Из командной строки require_relative завершается сбой, поэтому мы используем require, но сначала добавим текущий каталог в $LOAD_PATH через -I .

Ответ 7

$ rake test закончилось окно с рельсами 5.0.

Ответ 8

Если у вас нет грабли, попробуйте следующее:

http://blog.gingergriffis.com/post/85871430778/ruby-how-to-run-all-tests-in-a-directory

# run_all_tests.rb

require 'find'
require 'optparse'

options = {
  :exclude => [],
}

OptionParser.new do |opts|
  opts.on('--exclude Comma Separated String',
          'Test scripts to exclude') do |css|
    options[:exclude] = css.split(',')
  end
end.parse!

commands = []

Find.find(File.dirname(__FILE__)) do |path|
  Find.prune if path =~ /#{__FILE__}$/
    if !File.directory?(path) && (path =~ /(.*)\.rb$/)
      if options[:exclude].none? {|e| path.include?(e)}
        commands << "ruby #{path}"
      end
    end
end
command_string = commands.join(" && ")
exec(command_string)