Как запустить все тесты с minitest?


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

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

тесты находятся в minitest DSL.

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

Я искал подходящие задачи рейка и т. д, Но я не нашел.

9 63

9 ответов:

вот ссылка Rake:: TestTask.

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

require 'rake/testtask'

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

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

надеюсь, что это помогает.

ответ locks лучше, но я также хотел бы отметить, что вы также можете запускать minitest непосредственно из команды, например, с помощью команды ruby. Для выполнения тестов в спецификации / calculator_spec.RB file run:

$ 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 

это 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 и хотите избежать оплаты стоимости запуска дважды (один раз для рейка, а затем один раз для подпроцесса, который запускает рейк), просто используйте эту команду.

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

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

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

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

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

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

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

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

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

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

$ rake test выбежал из коробки rails 5.0.

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

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 .

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

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

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)