Log longest specs explicitly

Instead of logging them to the console at the end of the run,
add two new methods, logLongestSpec() and logLongestSpecs(number)
to the window object that will print out the results.
This commit is contained in:
Kevin Sawicki 2013-01-10 08:36:43 -08:00
parent f76db1f957
commit 7a89de077b
2 changed files with 35 additions and 29 deletions

34
spec/time-reporter.coffee Normal file
View File

@ -0,0 +1,34 @@
_ = require 'underscore'
module.exports =
class TimeReporter extends jasmine.Reporter
timedSpecs: []
constructor: ->
window.logLongestSpec = -> window.logLongestSpecs(1)
window.logLongestSpecs = (number=10) =>
console.log "#{number} longest running specs:"
for spec in _.sortBy(@timedSpecs, (spec) -> -spec.time)[0...number]
console.log "#{spec.time}ms"
console.log spec.description
reportSpecStarting: (spec) ->
stack = [spec.description]
suite = spec.suite
while suite
stack.unshift suite.description
suite = suite.parentSuite
@time = new Date().getTime()
reducer = (memo, description, index) ->
"#{memo}#{_.multiplyString(' ', index)}#{description}\n"
@description = _.reduce(stack, reducer, "")
reportSpecResults: ->
return unless @time? and @description?
@timedSpecs.push
description: @description
time: new Date().getTime() - @time
@time = null
@description = null

View File

@ -6,7 +6,7 @@ module.exports.runSpecSuite = (specSuite, logErrors=true) ->
nakedLoad 'jasmine-focused'
$ = require 'jquery'
_ = require 'underscore'
TimeReporter = require 'time-reporter'
$('body').append $$ ->
@div id: 'jasmine-content'
@ -20,34 +20,6 @@ module.exports.runSpecSuite = (specSuite, logErrors=true) ->
jasmineEnv = jasmine.getEnv()
jasmineEnv.addReporter(reporter)
class TimeReporter extends jasmine.Reporter
timedSpecs: []
reportSpecStarting: (spec) ->
stack = [spec.description]
suite = spec.suite
while suite
stack.unshift suite.description
suite = suite.parentSuite
@time = new Date().getTime()
@description = stack.join(' -> ')
reportSpecResults: ->
return unless @time? and @description?
@timedSpecs.push
description: @description
time: new Date().getTime() - @time
@time = null
@description = null
reportRunnerResults: ->
console.log '10 longest running specs:'
for spec in _.sortBy(@timedSpecs, (spec) -> -spec.time)[0...10]
console.log "#{spec.time}ms"
console.log spec.description
jasmineEnv.addReporter(new TimeReporter())
jasmineEnv.specFilter = (spec) -> reporter.specFilter(spec)
jasmineEnv.execute()