lib/reporters/spec.js
function Spec(runner, options) {
  Base.call(this, runner, options);

  var self = this;
  var indents = 0;
  var n = 0;

  function indent() {
    return Array(indents).join('  ');
  }

  runner.on(EVENT_RUN_BEGIN, function() {
    console.log();
  });

  runner.on(EVENT_SUITE_BEGIN, function(suite) {
    ++indents;
    console.log(color('suite', '%s%s'), indent(), suite.title);
  });

  runner.on(EVENT_SUITE_END, function() {
    --indents;
    if (indents === 1) {
      console.log();
    }
  });

  runner.on(EVENT_TEST_PENDING, function(test) {
    var fmt = indent() + color('pending', '  - %s');
    console.log(fmt, test.title);
  });

  runner.on(EVENT_TEST_PASS, function(test) {
    var fmt;
    if (test.speed === 'fast') {
      fmt =
        indent() +
        color('checkmark', '  ' + Base.symbols.ok) +
        color('pass', ' %s');
      console.log(fmt, test.title);
    } else {
      fmt =
        indent() +
        color('checkmark', '  ' + Base.symbols.ok) +
        color('pass', ' %s') +
        color(test.speed, ' (%dms)');
      console.log(fmt, test.title, test.duration);
    }
  });

  runner.on(EVENT_TEST_FAIL, function(test) {
    console.log(indent() + color('fail', '  %d) %s'), ++n, test.title);
  });

  runner.once(EVENT_RUN_END, self.epilogue.bind(self));
}
function Spec(runner, options) {
  Base.call(this, runner, options);

  var self = this;
  var indents = 0;
  var n = 0;

  function indent() {
    return Array(indents).join('  ');
  }

  runner.on(EVENT_RUN_BEGIN, function() {
    console.log();
  });

  runner.on(EVENT_SUITE_BEGIN, function(suite) {
    ++indents;
    console.log(color('suite', '%s%s'), indent(), suite.title);
  });

  runner.on(EVENT_SUITE_END, function() {
    --indents;
    if (indents === 1) {
      console.log();
    }
  });

  runner.on(EVENT_TEST_PENDING, function(test) {
    var fmt = indent() + color('pending', '  - %s');
    console.log(fmt, test.title);
  });

  runner.on(EVENT_TEST_PASS, function(test) {
    var fmt;
    if (test.speed === 'fast') {
      fmt =
        indent() +
        color('checkmark', '  ' + Base.symbols.ok) +
        color('pass', ' %s');
      console.log(fmt, test.title);
    } else {
      fmt =
        indent() +
        color('checkmark', '  ' + Base.symbols.ok) +
        color('pass', ' %s') +
        color(test.speed, ' (%dms)');
      console.log(fmt, test.title, test.duration);
    }
  });

  runner.on(EVENT_TEST_FAIL, function(test) {
    console.log(indent() + color('fail', '  %d) %s'), ++n, test.title);
  });

  runner.once(EVENT_RUN_END, self.epilogue.bind(self));
}
function Spec ( runner , options ) { Base . call ( this , runner , options ) ; var self = this ; var indents = 0 ; var n = 0 ; function indent ( ) { return Array ( indents ) . join ( '  ' ) ; } runner . on ( EVENT_RUN_BEGIN , function ( ) { console . log ( ) ; } ) ; runner . on ( EVENT_SUITE_BEGIN , function ( suite ) { ++ indents ; console . log ( color ( 'suite' , '%s%s' ) , indent ( ) , suite . title ) ; } ) ; runner . on ( EVENT_SUITE_END , function ( ) { -- indents ; if ( indents === 1 ) { console . log ( ) ; } } ) ; runner . on ( EVENT_TEST_PENDING , function ( test ) { var fmt = indent ( ) + color ( 'pending' , '  - %s' ) ; console . log ( fmt , test . title ) ; } ) ; runner . on ( EVENT_TEST_PASS , function ( test ) { var fmt ; if ( test . speed === 'fast' ) { fmt = indent ( ) + color ( 'checkmark' , '  ' + Base . symbols . ok ) + color ( 'pass' , ' %s' ) ; console . log ( fmt , test . title ) ; } else { fmt = indent ( ) + color ( 'checkmark' , '  ' + Base . symbols . ok ) + color ( 'pass' , ' %s' ) + color ( test . speed , ' (%dms)' ) ; console . log ( fmt , test . title , test . duration ) ; } } ) ; runner . on ( EVENT_TEST_FAIL , function ( test ) { console . log ( indent ( ) + color ( 'fail' , '  %d) %s' ) , ++ n , test . title ) ; } ) ; runner . once ( EVENT_RUN_END , self . epilogue . bind ( self ) ) ; }
Constructs a new `Spec` reporter instance.

@public
@class
@memberof Mocha.reporters
@extends Mocha.reporters.Base
@param {Runner} runner - Instance triggers reporter actions.
@param {Object} [options] - runner options
Constructs a new Spec reporter instance .