Class: Ask::Eval::Reporters::JUnit
- Inherits:
-
Object
- Object
- Ask::Eval::Reporters::JUnit
- Defined in:
- lib/ask/eval/reporters/junit.rb
Overview
JUnit XML reporter — produces JUnit-compatible XML for CI systems (Jenkins, CircleCI, GitLab CI, etc.).
Instance Method Summary collapse
-
#initialize(results) ⇒ JUnit
constructor
A new instance of JUnit.
-
#to_xml ⇒ String
Generate JUnit XML.
Constructor Details
#initialize(results) ⇒ JUnit
Returns a new instance of JUnit.
10 11 12 |
# File 'lib/ask/eval/reporters/junit.rb', line 10 def initialize(results) @results = results end |
Instance Method Details
#to_xml ⇒ String
Generate JUnit XML.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/ask/eval/reporters/junit.rb', line 16 def to_xml require "rexml/document" doc = REXML::Document.new doc << REXML::XMLDecl.new("1.0", "UTF-8") testsuites = REXML::Element.new("testsuites") testsuite = REXML::Element.new("testsuite") testsuite.add_attribute("name", "ask-eval") testsuite.add_attribute("tests", @results.size.to_s) testsuite.add_attribute("failures", @results.count { |r| !result_passed?(r) }.to_s) @results.each do |r| testcase = REXML::Element.new("testcase") testcase.add_attribute("name", "#{r[:test] || 'eval'} #{r[:name]}") testcase.add_attribute("classname", "ask.eval") testcase.add_attribute("time", "0.0") passed = result_passed?(r) unless passed failure = REXML::Element.new("failure") result = r[:result] reason = result.is_a?(Hash) ? result[:reason] : result.reason score = result.is_a?(Hash) ? result[:score] : result.score failure.add_attribute("message", reason || "Assertion failed") failure.add_attribute("type", "AssertionError") failure.add_text("Score: #{score} | #{reason}") testcase << failure end testsuite << testcase end testsuites << testsuite doc << testsuites out = +"" doc.write(out, 2) out end |