module CircleCI::TestReport

Constants

VERSION

Public Class Methods

create_xml(rspec_json:, timestamp: Time.now.iso8601, hostname: "unknown") click to toggle source
# File lib/circleci/test_report.rb, line 10
def create_xml(rspec_json:, timestamp: Time.now.iso8601, hostname: "unknown")
  rspec_hash = JSON.parse(rspec_json)
  summary    = rspec_hash["summary"]

  suite           = TestSuite.new
  suite.name      = "rspec"
  suite.tests     = summary["example_count"]
  suite.skipped   = summary["pending_count"]
  suite.failures  = summary["failure_count"]
  suite.errors    = summary["errors_outside_of_examples_count"]
  suite.time      = summary["duration"]
  suite.timestamp = timestamp
  suite.hostname  = hostname
  suite.seed      = 0

  rspec_hash["examples"].each do |example|
    testcase           = TestCase.new
    testcase.classname = example["file_path"].split(".")[1].split("/")[1..-1].join(".")
    testcase.name      = example["full_description"]
    testcase.file      = example["file_path"]
    testcase.time      = example["run_time"]
    case example["status"]
    when "failed"
      exception = example["exception"]
      testcase.failure = {
        message: exception["message"],
        type:    exception["class"],
        text:    exception["backtrace"] ? exception["backtrace"].join("\n") : ''
      }
    when "pending"
      testcase.skipped = true
    end
    suite.add_test_case(testcase)
  end

  suite.to_xml
end