class RspecHtmlFormatter

Constants

DEFAULT_REPORT_PATH
REPORT_PATH
RESOURCE_DIR
SCREENRECORD_DIR
SCREENSHOT_DIR

Public Class Methods

new(io_standard_out) click to toggle source
# File lib/rspec_html_formatter.rb, line 171
def initialize(io_standard_out)
  create_reports_dir
  create_screenshots_dir
  create_screenrecords_dir
  copy_resources
  @all_groups = {}

  @group_level = 0
end

Public Instance Methods

close(notification) click to toggle source
# File lib/rspec_html_formatter.rb, line 258
def close(notification)
  File.open("#{REPORT_PATH}/overview.html", 'w') do |f|
    @overview = @all_groups

    @passed = @overview.values.map { |g| g[:passed].size }.inject(0) { |sum, i| sum + i }
    @failed = @overview.values.map { |g| g[:failed].size }.inject(0) { |sum, i| sum + i }
    @pending = @overview.values.map { |g| g[:pending].size }.inject(0) { |sum, i| sum + i }

    duration_values = @overview.values.map { |e| e[:duration] }

    duration_keys = duration_values.size.times.to_a
    if duration_values.size < 2
      duration_values.unshift(duration_values.first)
      duration_keys = duration_keys << 1
    end

    @durations = duration_keys.zip(duration_values.map{|d| d.to_f.round(5)})
    @summary_duration = duration_values.map{|d| d.to_f.round(5)}.inject(0) { |sum, i| sum + i }.to_s(:rounded, precision: 5)
    @total_examples = @passed + @failed + @pending
    template_file = File.read(File.dirname(__FILE__) + '/../templates/overview.erb')
    f.puts ERB.new(template_file).result(binding)
  end
end
example_failed(notification) click to toggle source
# File lib/rspec_html_formatter.rb, line 203
def example_failed(notification)
  @group_example_failure_count += 1
  @group_examples << Example.new(notification.example)
end
example_group_finished(notification) click to toggle source
# File lib/rspec_html_formatter.rb, line 213
def example_group_finished(notification)
  @group_level -= 1

  if @group_level == 0
    File.open("#{REPORT_PATH}/#{notification.group.description.parameterize}.html", 'w') do |f|

      @passed = @group_example_success_count
      @failed = @group_example_failure_count
      @pending = @group_example_pending_count

      duration_values = @group_examples.map { |e| e.run_time }

      duration_keys = duration_values.size.times.to_a
      if duration_values.size < 2 and duration_values.size > 0
        duration_values.unshift(duration_values.first)
        duration_keys = duration_keys << 1
      end

      @title = notification.group.description
      @durations = duration_keys.zip(duration_values)

      @summary_duration = duration_values.inject(0) { |sum, i| sum + i }.to_s(:rounded, precision: 5)
      @examples = Specify.new(@group_examples).process

      class_map = {passed: 'success', failed: 'danger', pending: 'warning'}
      statuses = @examples.map { |e| e.status }
      status = statuses.include?('failed') ? 'failed' : (statuses.include?('passed') ? 'passed' : 'pending')
      @all_groups[notification.group.description.parameterize] = {
          group: notification.group.description,
          examples: @examples.size,
          status: status,
          klass: class_map[status.to_sym],
          passed: statuses.select { |s| s == 'passed' },
          failed: statuses.select { |s| s == 'failed' },
          pending: statuses.select { |s| s == 'pending' },
          duration: @summary_duration
      }

      template_file = File.read(File.dirname(__FILE__) + '/../templates/report.erb')

      f.puts ERB.new(template_file).result(binding)
    end
  end
end
example_group_started(notification) click to toggle source
# File lib/rspec_html_formatter.rb, line 181
def example_group_started(notification)
  if @group_level == 0
    @example_group = {}
    @group_examples = []
    @group_example_count = 0
    @group_example_success_count = 0
    @group_example_failure_count = 0
    @group_example_pending_count = 0
  end

  @group_level += 1
end
example_passed(notification) click to toggle source
# File lib/rspec_html_formatter.rb, line 198
def example_passed(notification)
  @group_example_success_count += 1
  @group_examples << Example.new(notification.example)
end
example_pending(notification) click to toggle source
# File lib/rspec_html_formatter.rb, line 208
def example_pending(notification)
  @group_example_pending_count += 1
  @group_examples << Example.new(notification.example)
end
example_started(notification) click to toggle source
# File lib/rspec_html_formatter.rb, line 194
def example_started(notification)
  @group_example_count += 1
end

Private Instance Methods

copy_resources() click to toggle source
# File lib/rspec_html_formatter.rb, line 296
def copy_resources
  FileUtils.cp_r(File.dirname(__FILE__) + '/../resources', REPORT_PATH)
end
create_reports_dir() click to toggle source
# File lib/rspec_html_formatter.rb, line 283
def create_reports_dir
  FileUtils.rm_rf(REPORT_PATH) if File.exists?(REPORT_PATH)
  FileUtils.mkpath(REPORT_PATH)
end
create_screenrecords_dir() click to toggle source
# File lib/rspec_html_formatter.rb, line 292
def create_screenrecords_dir
  FileUtils.mkdir_p SCREENRECORD_DIR unless File.exists?(SCREENRECORD_DIR)
end
create_screenshots_dir() click to toggle source
# File lib/rspec_html_formatter.rb, line 288
def create_screenshots_dir
  FileUtils.mkdir_p SCREENSHOT_DIR unless File.exists?(SCREENSHOT_DIR)
end