class Jscov::Collector

Public Class Methods

new(session, logs) click to toggle source
# File lib/jscov/collector.rb, line 6
def initialize(session, logs)
  @session = session || Capybara.current_session
  @logs = logs
end

Public Instance Methods

browser_logs() click to toggle source
# File lib/jscov/collector.rb, line 33
def browser_logs
  logs = @session.driver.browser.manage.logs.get(:browser)
  (@logs || []) + logs
end
coverages() click to toggle source
# File lib/jscov/collector.rb, line 11
def coverages
  return [] unless selenium?

  dump_coverage

  browser_logs
    .map { |log| parse(log.message) }
    .compact
    .map { |cov| Coverage.new(cov) }
end
dump_coverage() click to toggle source
# File lib/jscov/collector.rb, line 26
    def dump_coverage
      code = <<~JS
        typeof __jscov_dumpCoverage === 'function' && __jscov_dumpCoverage()
      JS
      @session.execute_script(code)
    end
parse(message) click to toggle source
# File lib/jscov/collector.rb, line 38
def parse(message)
  json_string = message[/__jscov" (.*)/, 1]
  return if json_string.nil?

  json = JSON.parse(json_string)
  JSON.parse(json)
rescue JSON::ParserError
  nil
end
selenium?() click to toggle source
# File lib/jscov/collector.rb, line 22
def selenium?
  @session.driver.browser.respond_to?(:manage)
end