From e40d837b409eb433554428646af841cc27748e82 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 28 Aug 2013 22:07:57 -0700 Subject: [PATCH] Log longest specs/suites during grunt test --- spec/jasmine-helper.coffee | 7 +++++- spec/time-reporter.coffee | 51 ++++++++++++++++++++++---------------- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/spec/jasmine-helper.coffee b/spec/jasmine-helper.coffee index fed790afe..f7c5acef2 100644 --- a/spec/jasmine-helper.coffee +++ b/spec/jasmine-helper.coffee @@ -15,6 +15,7 @@ module.exports.runSpecSuite = (specSuite, logErrors=true) -> $ = require 'jquery' TimeReporter = require 'time-reporter' + timeReporter = new TimeReporter() if atom.getLoadSettings().exitWhenDone {jasmineNode} = require 'jasmine-node/lib/jasmine-node/reporter' @@ -22,6 +23,10 @@ module.exports.runSpecSuite = (specSuite, logErrors=true) -> print: (args...) -> process.stderr.write(args...) onComplete: (runner) -> + process.stdout.write('\n') + timeReporter.logLongestSuites 10, (line) -> process.stdout.write("#{line}\n") + process.stdout.write('\n') + timeReporter.logLongestSpecs 10, (line) -> process.stdout.write("#{line}\n") atom.exit(runner.results().failedCount > 0 ? 1 : 0) else AtomReporter = require 'atom-reporter' @@ -31,7 +36,7 @@ module.exports.runSpecSuite = (specSuite, logErrors=true) -> jasmineEnv = jasmine.getEnv() jasmineEnv.addReporter(reporter) - jasmineEnv.addReporter(new TimeReporter()) + jasmineEnv.addReporter(timeReporter) $('body').append $$ -> @div id: 'jasmine-content' diff --git a/spec/time-reporter.coffee b/spec/time-reporter.coffee index 7004072ef..20d8dbab7 100644 --- a/spec/time-reporter.coffee +++ b/spec/time-reporter.coffee @@ -1,52 +1,59 @@ _ = require 'underscore' module.exports = -class TimeReporter extends jasmine.Reporter +class TimeReporter extends jasmine.Reporter constructor: -> window.timedSpecs = [] window.timedSuites = {} - window.logLongestSpec = -> window.logLongestSpecs(1) + window.logLongestSpec = => @logLongestSpecs(1) + window.logLongestSpecs = (number) => @logLongestSpecs(number) + window.logLongestSuite = => @logLongestSuites(1) + window.logLongestSuites = (number) => @logLongestSuites(number) - window.logLongestSpecs = (number=10) => - console.log "#{number} longest running specs:" - for spec in _.sortBy(window.timedSpecs, (spec) -> -spec.time)[0...number] - console.log "#{spec.time}ms" - console.log spec.description + logLongestSuites: (number=10, log) -> + log ?= (line) -> console.log(line) + log "Longest running suites:" + suites = _.map(window.timedSuites, (key, value) -> [value, key]) + for suite in _.sortBy(suites, (suite) => -suite[1])[0...number] + log " #{suite[0]} (#{suite[1]}ms)" - window.logLongestSuite = -> window.logLongestSuites(1) - - window.logLongestSuites = (number=10) => - console.log "#{number} longest running suites:" - suites = _.map(window.timedSuites, (key, value) -> [value, key]) - for suite in _.sortBy(suites, (suite) => -suite[1])[0...number] - console.log suite[0], suite[1] + logLongestSpecs: (number=10, log) -> + log ?= (line) -> console.log(line) + log "Longest running specs:" + for spec in _.sortBy(window.timedSpecs, (spec) -> -spec.time)[0...number] + log spec.description reportSpecStarting: (spec) -> - stack = [spec.description] + @stack = [spec.description] suite = spec.suite while suite - stack.unshift suite.description + @stack.unshift suite.description @suite = suite.description suite = suite.parentSuite @time = new Date().getTime() - reducer = (memo, description, index) -> - "#{memo}#{_.multiplyString(' ', index)}#{description}\n" - @description = _.reduce(stack, reducer, "") reportSpecResults: (spec) -> - return unless @time? and @description? + return unless @time? and @stack? duration = new Date().getTime() - @time + reducer = (memo, description, index) -> + if index is 0 + "#{description} (#{duration}ms)\n" + else + "#{memo}#{_.multiplyString(' ', index)}#{description}\n" + description = _.reduce(@stack, reducer, '') + window.timedSpecs.push - description: @description + description: description time: duration name: spec.getFullName() if timedSuites[@suite] window.timedSuites[@suite] += duration else window.timedSuites[@suite] = duration + @time = null - @description = null + @stack = null