Как запустить все тесты с минитестом? - PullRequest
67 голосов
/ 25 января 2011

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

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

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

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

Я искал подходящие грабли и т. Д., Но не нашел ни одного.

Ответы [ 9 ]

87 голосов
/ 11 февраля 2011

Вот ссылка на Rake :: TestTask .

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

require 'rake/testtask'

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

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

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

24 голосов
/ 20 февраля 2013
Ответ

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

$ ruby spec/calculator_spec.rb 

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

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

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

$ for file in spec/*.rb; do ruby $file; done 
18 голосов
/ 19 декабря 2013

Это то, что 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), просто используйте эту команду.

13 голосов
/ 14 мая 2014

Вот все мои rakefile, которые я положил в свой верхний каталог:

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

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

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

Чтобы получить симпатичный цветной вывод Minitest с именами всех моих методов тестирования, у меня есть файл minitest_helper.rb в моей директории / test.(Пришлось установить gem minitest-reporters):

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

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

6 голосов
/ 10 июня 2014

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

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

при выполнении make запустит все ваши тесты.

3 голосов
/ 10 ноября 2016

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

3 голосов
/ 27 июля 2015

Другой способ сделать это, используя только стандартную библиотеку 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 .

0 голосов
/ 02 сентября 2018

Я понимаю, что это очень старый вопрос, но rake test работает для меня в Rails 4.2, включая тестируемые файлы, а также тесты / интеграцию /, тестирование / модуль / и т. Д.

0 голосов
/ 16 мая 2014

Если у вас нет рейка, попробуйте это:

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)
...