Module: IntegrationTestsRails::Istanbul::Collector

Defined in:
lib/integration_tests_rails/istanbul/collector.rb

Overview

Collects reports and manages instrumented files.

Class Method Summary collapse

Class Method Details

.collect(page) ⇒ Object



28
29
30
31
32
33
# File 'lib/integration_tests_rails/istanbul/collector.rb', line 28

def collect(page)
  coverage_data = page.evaluate_script('window.__coverage__')
  save_coverage_snapshot(coverage_data) if coverage_data.present?
rescue StandardError => e
  Util.log "Coverage collection failed: #{e.message}"
end

.generate_reportObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/integration_tests_rails/istanbul/collector.rb', line 35

def generate_report
  # Generate report using Node.js (will merge all snapshot files)
  report_script = build_report_script
  output = `node -e #{Shellwords.escape(report_script)} 2>&1`.strip

  # Parse and display coverage summary
  return if output.blank?

  begin
    data = JSON.parse(output)
    puts "\nJavaScript Coverage: #{data['covered']} / #{data['total']} LOC (#{data['pct']}%) covered."
    puts "Coverage report: coverage/javascript/index.html\n"
  rescue JSON::ParserError
    puts output
  end
end

.restore_original_filesObject



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/integration_tests_rails/istanbul/collector.rb', line 52

def restore_original_files
  config = IntegrationTestsRails.configuration

  backup_dir = config.backup_path
  source_dir = config.source_path

  return unless Dir.exist?(backup_dir)

  FileUtils.rm_rf(source_dir)
  FileUtils.cp_r(backup_dir, source_dir)
  Util.log '✓ Restored original JavaScript files'
end

.setupObject



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/integration_tests_rails/istanbul/collector.rb', line 13

def setup
  config = IntegrationTestsRails.configuration

  # Instrument files
  Instrumenter.instrument_all

  # Backup and replace original files
  backup_and_replace_files

  # Clean previous coverage data
  coverage_dir = config.coverage_dir
  FileUtils.rm_rf(coverage_dir)
  FileUtils.mkdir_p(coverage_dir)
end