Sha256: 1fa682167a0ec638d02808ae471ab1231d5f660eef10a79be002495a5b823088

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

require 'nokogiri'

module Jasmine
  module Formatters
    class JunitXml
      def initialize
        load_config
        @doc = Nokogiri::XML '<testsuites></testsuites>', nil, 'UTF-8'
      end

      def format(results)
        testsuites = doc.at_css('testsuites')

        results.each do |result|
          testsuite = Nokogiri::XML::Node.new 'testsuite', doc
          testsuite['tests'] = 1
          testsuite['failures'] = result.failed? ? 1 : 0
          testsuite['errors'] = 0
          testsuite['name'] = result.suite_name
          testsuite.parent = testsuites

          testcase = Nokogiri::XML::Node.new 'testcase', doc
          testcase['name'] = result.description

          if result.failed?
            result.failed_expectations.each do |failed_exp|
              failure = Nokogiri::XML::Node.new 'failure', doc
              failure['message'] = failed_exp.message
              failure['type'] = 'Failure'
              failure.content = failed_exp.stack
              failure.parent = testcase
            end
          end

          testcase.parent = testsuite
        end
      end

      def done
        File.open(File.join(output_dir, 'junit_results.xml'), 'w') do |file|
          file.puts doc.to_xml(indent: 2)
        end
      end

      private
      attr_reader :doc, :config

      def output_dir
        config['junit_xml_path'] || Dir.pwd
      end

      def load_config
        filepath = File.join(Dir.pwd, 'spec', 'javascripts', 'support', 'jasmine_junitxml_formatter.yml')
        @config = YAML::load(ERB.new(File.read(filepath)).result(binding)) if File.exist?(filepath)
        @config ||= {}
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jasmine_junitxml_formatter-0.1.0 lib/jasmine/formatters/junit_xml.rb