Class: Minitest::Reporters::JUnitReporter
- Inherits:
-
BaseReporter
- Object
- StatisticsReporter
- BaseReporter
- Minitest::Reporters::JUnitReporter
- Defined in:
- lib/minitest/reporters/junit_reporter.rb
Overview
A reporter for writing JUnit test reports Intended for easy integration with CI servers - tested on JetBrains TeamCity
Inspired by ci_reporter (see https://github.com/nicksieger/ci_reporter) Also inspired by Marc Seeger's attempt at producing a JUnitReporter (see https://github.com/rb2k/minitest-reporters/commit/e13d95b5f884453a9c77f62bc5cba3fa1df30ef5) Also inspired by minitest-ci (see https://github.com/bhenderson/minitest-ci)
Instance Attribute Summary
Attributes inherited from BaseReporter
Instance Method Summary collapse
-
#initialize(reports_dir = "test/reports", empty = true) ⇒ JUnitReporter
constructor
A new instance of JUnitReporter.
- #report
Methods inherited from BaseReporter
#add_defaults, #after_test, #before_test, #record
Constructor Details
#initialize(reports_dir = "test/reports", empty = true) ⇒ JUnitReporter
Returns a new instance of JUnitReporter.
12 13 14 15 16 17 18 19 20 21 |
# File 'lib/minitest/reporters/junit_reporter.rb', line 12 def initialize(reports_dir = "test/reports", empty = true) super({}) @reports_path = File.absolute_path(reports_dir) if empty puts "Emptying #{@reports_path}" FileUtils.remove_dir(@reports_path) if File.exists?(@reports_path) FileUtils.mkdir_p(@reports_path) end end |
Instance Method Details
#report
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/minitest/reporters/junit_reporter.rb', line 23 def report super puts "Writing XML reports to #{@reports_path}" suites = tests.group_by(&:class) suites.each do |suite, tests| suite_result = analyze_suite(tests) xml = Builder::XmlMarkup.new(:indent => 2) xml.instruct! xml.testsuite(:name => suite, :skipped => suite_result[:skip_count], :failures => suite_result[:fail_count], :errors => suite_result[:error_count], :tests => suite_result[:test_count], :assertions => suite_result[:assertion_count], :time => suite_result[:time]) do tests.each do |test| xml.testcase(:name => test.name, :classname => suite, :assertions => test.assertions, :time => test.time) do xml << (test) unless test.passed? end end end File.open(filename_for(suite), "w") { |file| file << xml.target! } end end |