Вы можете использовать загрузчик Minitest PLugin для загрузки плагина. Это, безусловно, самое чистое решение. Однако система плагинов не очень хорошо документирована.
К счастью, Адам Сандерсон написал статью о системе плагинов .
Лучшей новостью является то, что эта статья объясняет систему плагинов, написав пример плагина, который сообщает медленные тесты. Попробуйте minitest-snail , это, вероятно, почти то, что вы хотите.
С небольшими изменениями мы можем использовать Reporter
, чтобы пометить тест как неудачный, если он слишком медленный, например, так (не проверено):
Файл minitest/snail_reporter.rb
:
module Minitest
class SnailReporter < Reporter
attr_reader :max_duration
def self.options
@default_options ||= {
:max_duration => 2
}
end
def self.enable!(options = {})
@enabled = true
self.options.merge!(options)
end
def self.enabled?
@enabled ||= false
end
def initialize(io = STDOUT, options = self.class.options)
super
@max_duration = options.fetch(:max_duration)
end
def record result
@passed = result.time < max_duration
slow_tests << result if !@passed
end
def passed?
@passed
end
def report
return if slow_tests.empty?
slow_tests.sort_by!{|r| -r.time}
io.puts
io.puts "#{slow_tests.length} slow tests."
slow_tests.each_with_index do |result, i|
io.puts "%3d) %s: %.2f s" % [i+1, result.location, result.time]
end
end
end
end
Файл minitest/snail_plugin.rb
:
require_relative './snail_reporter'
module Minitest
def self.plugin_snail_options(opts, options)
opts.on "--max-duration TIME", "Report tests that take longer than TIME seconds." do |max_duration|
SnailReporter.enable! :max_duration => max_duration.to_f
end
end
def self.plugin_snail_init(options)
if SnailReporter.enabled?
io = options[:io]
Minitest.reporter.reporters << SnailReporter.new(io)
end
end
end