Как запустить все тесты с minitest?
Я скачал исходный код для проекта, нашел ошибку и исправил ее.
теперь я хочу запустить тесты, чтобы узнать, если я сломал что-нибудь.
тесты находятся в minitest DSL.
Как мне запустить их все сразу?
Я искал подходящие задачи рейка и т. д, Но я не нашел.
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
выполнит все ваши тесты.
еще один способ сделать это, используя только стандартную библиотеку 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)