diff --git a/test/reporters/base.spec.js b/test/reporters/base.spec.js
index 739063f32a..40d1374537 100644
--- a/test/reporters/base.spec.js
+++ b/test/reporters/base.spec.js
@@ -1,138 +1,124 @@
'use strict';
var assert = require('assert');
-var chai = require('chai');
-var sinon = require('sinon');
-var helpers = require('./helpers');
-var reporters = require('../../').reporters;
-
+var chaiExpect = require('chai').expect;
+var Base = require('../../lib/reporters/base');
var AssertionError = assert.AssertionError;
-var Base = reporters.Base;
-var chaiExpect = chai.expect;
-var createElements = helpers.createElements;
-var makeTest = helpers.makeTest;
+var makeTest = require('./helpers').makeTest;
+var createElements = require('./helpers').createElements;
describe('Base reporter', function() {
- var sandbox;
var stdout;
+ var stdoutWrite;
+ var useColors;
+ var err;
+ var errOut;
+ var test;
function list(tests) {
- try {
- try {
- Base.list(tests);
- } finally {
- sandbox.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
+ Base.useColors = false;
+ var retval = Base.list(tests);
+ Base.useColors = useColors;
+ return retval;
}
function generateDiff(actual, expected) {
- var diffStr;
-
- try {
- try {
- diffStr = Base.generateDiff(actual, expected);
- } finally {
- sandbox.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
-
- return diffStr;
+ Base.useColors = false;
+ var retval = Base.generateDiff(actual, expected);
+ Base.useColors = useColors;
+ return retval;
}
- var gather = function(chunk, encoding, cb) {
- stdout.push(chunk);
- };
-
beforeEach(function() {
- sandbox = sinon.createSandbox();
- sandbox.stub(Base, 'useColors').value(false);
- sandbox.stub(process.stdout, 'write').callsFake(gather);
+ useColors = Base.useColors;
stdout = [];
+ stdoutWrite = process.stdout.write;
+ process.stdout.write = function(string, enc, callback) {
+ stdout.push(string);
+ stdoutWrite.call(process.stdout, string, enc, callback);
+ };
});
afterEach(function() {
- sandbox.restore();
+ process.stdout.write = stdoutWrite;
});
describe('showDiff', function() {
- var err;
-
beforeEach(function() {
err = new AssertionError({actual: 'foo', expected: 'bar'});
});
it('should show diffs by default', function() {
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
expect(errOut, 'to match', /- actual/);
expect(errOut, 'to match', /\+ expected/);
});
- it("should show diffs if 'err.showDiff' is true", function() {
+ it('should show diffs if property set to `true`', function() {
err.showDiff = true;
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
expect(errOut, 'to match', /- actual/);
expect(errOut, 'to match', /\+ expected/);
});
- it("should not show diffs if 'err.showDiff' is false", function() {
+ it('should not show diffs when showDiff property set to `false`', function() {
err.showDiff = false;
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
expect(errOut, 'not to match', /- actual/);
expect(errOut, 'not to match', /\+ expected/);
});
- it("should not show diffs if 'expected' is not defined", function() {
- var _err = new Error('ouch');
- var test = makeTest(_err);
+ it('should not show diffs when expected is not defined', function() {
+ err = new Error('ouch');
+
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
expect(errOut, 'not to match', /- actual/);
expect(errOut, 'not to match', /\+ expected/);
});
- it("should not show diffs if 'hideDiff' is true", function() {
- var test = makeTest(err);
+ it('should not show diffs when hideDiff is set', function() {
+ test = makeTest(err);
- sandbox.stub(Base, 'hideDiff').value(true);
+ Base.hideDiff = true;
list([test]);
+ Base.hideDiff = false; // Revert to original value
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
expect(errOut, 'not to match', /- actual/);
expect(errOut, 'not to match', /\+ expected/);
});
});
- describe('getting two strings', function() {
+ describe('Getting two strings', function() {
// Fix regression V1.2.1(see: issue #1241)
it('should show strings diff as is', function() {
- var err = new Error('test');
+ err = new Error('test');
+
err.actual = 'foo\nbar';
err.expected = 'foo\nbaz';
err.showDiff = true;
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
+
expect(errOut, 'not to match', /"foo\\nbar"/);
expect(errOut, 'to match', /foo/).and('to match', /bar/);
expect(errOut, 'to match', /test/);
@@ -141,19 +127,26 @@ describe('Base reporter', function() {
});
});
- describe('diff generation', function() {
- var inlineDiffsStub;
+ describe('Diff generation', function() {
+ var oldInlineDiffs;
+ var actual;
+ var expected;
+ var output;
beforeEach(function() {
- inlineDiffsStub = sandbox.stub(Base, 'inlineDiffs');
+ oldInlineDiffs = Base.inlineDiffs;
+ });
+
+ afterEach(function() {
+ Base.inlineDiffs = oldInlineDiffs;
});
- it("should generate unified diffs if 'inlineDiffs' is false", function() {
- var actual = 'a foo unified diff';
- var expected = 'a bar unified diff';
+ it('should generate unified diffs if `inlineDiff === false`', function() {
+ actual = 'a foo unified diff';
+ expected = 'a bar unified diff';
- inlineDiffsStub.value(false);
- var output = generateDiff(actual, expected);
+ Base.inlineDiffs = false;
+ output = generateDiff(actual, expected);
expect(
output,
@@ -162,12 +155,12 @@ describe('Base reporter', function() {
);
});
- it("should generate inline diffs if 'inlineDiffs' is true", function() {
- var actual = 'a foo inline diff';
- var expected = 'a bar inline diff';
+ it('should generate inline diffs if `inlineDiffs === true`', function() {
+ actual = 'a foo inline diff';
+ expected = 'a bar inline diff';
- inlineDiffsStub.value(true);
- var output = generateDiff(actual, expected);
+ Base.inlineDiffs = true;
+ output = generateDiff(actual, expected);
expect(
output,
@@ -177,37 +170,39 @@ describe('Base reporter', function() {
});
});
- describe('inline strings diff', function() {
- beforeEach(function() {
- sandbox.stub(Base, 'inlineDiffs').value(true);
- });
+ describe('Inline strings diff', function() {
+ it('should show single line diff if property set to `true`', function() {
+ err = new Error('test');
- it("should show single line diff if 'inlineDiffs' is true", function() {
- var err = new Error('test');
err.actual = 'a foo inline diff';
err.expected = 'a bar inline diff';
err.showDiff = true;
- var test = makeTest(err);
+ test = makeTest(err);
+ Base.inlineDiffs = true;
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
+
expect(errOut, 'to match', /a foobar inline diff/);
expect(errOut, 'to match', /test/);
expect(errOut, 'to match', /actual/);
expect(errOut, 'to match', /expected/);
});
- it('should split lines if string has more than 4 line breaks', function() {
- var err = new Error('test');
+ it('should split lines when string has more than 4 line breaks', function() {
+ err = new Error('test');
+
err.actual = 'a\nfoo\ninline\ndiff\nwith\nmultiple lines';
err.expected = 'a\nbar\ninline\ndiff\nwith\nmultiple lines';
err.showDiff = true;
- var test = makeTest(err);
+ test = makeTest(err);
+ Base.inlineDiffs = true;
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
+
expect(errOut, 'to match', /1 \| a/);
expect(errOut, 'to match', /2 \| foobar/);
expect(errOut, 'to match', /3 \| inline/);
@@ -220,21 +215,21 @@ describe('Base reporter', function() {
});
});
- describe('unified diff', function() {
+ describe('unified diff reporter', function() {
beforeEach(function() {
- sandbox.stub(Base, 'inlineDiffs').value(false);
+ err = new Error('test');
});
it('should separate diff hunks by two dashes', function() {
- var err = new Error('test');
err.actual = createElements({from: 2, to: 11});
err.expected = createElements({from: 1, to: 10});
err.showDiff = true;
- var test = makeTest(err);
+ test = makeTest(err);
+ Base.inlineDiffs = false;
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
var regexesToMatch = [
/\[/,
@@ -262,15 +257,16 @@ describe('Base reporter', function() {
});
it('should stringify objects', function() {
- var err = new Error('test');
+ err = new Error('test');
+
err.actual = {key: 'a1'};
err.expected = {key: 'e1'};
err.showDiff = true;
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
expect(errOut, 'to match', /"key"/);
expect(errOut, 'to match', /test/);
expect(errOut, 'to match', /- actual/);
@@ -278,18 +274,18 @@ describe('Base reporter', function() {
});
it('should stringify Object.create(null)', function() {
- var err = new Error('test');
+ err = new Error('test');
err.actual = Object.create(null);
err.actual.hasOwnProperty = 1;
err.expected = Object.create(null);
err.expected.hasOwnProperty = 2;
err.showDiff = true;
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
expect(errOut, 'to match', /"hasOwnProperty"/);
expect(errOut, 'to match', /test/);
expect(errOut, 'to match', /- actual/);
@@ -303,11 +299,11 @@ describe('Base reporter', function() {
err.actual = false;
err.expected = true;
err.showDiff = true;
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
expect(errOut, 'to match', /\+true/);
expect(errOut, 'to match', /-false/);
expect(errOut, 'to match', /- actual/);
@@ -315,21 +311,18 @@ describe('Base reporter', function() {
}
});
- it("should interpret 'chai' module custom error messages", function() {
- var actual = 43;
- var expected = 42;
-
+ it('should interpret Chai custom error messages', function() {
try {
- chaiExpect(actual, 'custom error message').to.equal(expected);
+ chaiExpect(43, 'custom error message').to.equal(42);
} catch (err) {
- err.actual = actual;
- err.expected = expected;
+ err.actual = 43;
+ err.expected = 42;
err.showDiff = true;
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
expect(errOut, 'to match', /custom error message\n/)
.and('to match', /\+42/)
.and('to match', /-43/)
@@ -338,23 +331,20 @@ describe('Base reporter', function() {
}
});
- it("should interpret 'assert' module custom error messages", function() {
- var actual = 43;
- var expected = 42;
-
+ it('should interpret assert module custom error messages', function() {
try {
- assert.strictEqual(actual, expected, 'custom error message');
+ assert.strictEqual(43, 42, 'custom error message');
// AssertionError: custom error message: expected 43 to equal 42.
// assert.equal(43, 42, 'custom error message: expected 43 to equal 42.');
} catch (err) {
- err.actual = actual;
- err.expected = expected;
+ err.actual = 43;
+ err.expected = 42;
err.showDiff = true;
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n');
+ errOut = stdout.join('\n');
expect(errOut, 'to match', /custom error message\n/);
expect(errOut, 'to match', /\+42/);
expect(errOut, 'to match', /-43/);
@@ -364,57 +354,53 @@ describe('Base reporter', function() {
});
it('should remove message from stack', function() {
- var err = {
+ err = {
message: 'Error',
stack: 'Error\nfoo\nbar',
showDiff: false
};
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n').trim();
+ errOut = stdout.join('\n').trim();
expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar');
});
- it("should use 'inspect' if 'message' is not set", function() {
- var err = {
+ it('should use the inspect() property if `message` is not set', function() {
+ err = {
showDiff: false,
inspect: function() {
return 'an error happened';
}
};
- var test = makeTest(err);
-
+ test = makeTest(err);
list([test]);
-
- var errOut = stdout.join('\n').trim();
+ errOut = stdout.join('\n').trim();
expect(errOut, 'to be', '1) test title:\n an error happened');
});
- it("should set an empty message if neither 'message' nor 'inspect' is set", function() {
- var err = {
+ it('should set an empty message if `message` and `inspect()` are not set', function() {
+ err = {
showDiff: false
};
- var test = makeTest(err);
-
+ test = makeTest(err);
list([test]);
-
- var errOut = stdout.join('\n').trim();
+ errOut = stdout.join('\n').trim();
expect(errOut, 'to be', '1) test title:');
});
it('should not modify stack if it does not contain message', function() {
- var err = {
+ err = {
message: 'Error',
stack: 'foo\nbar',
showDiff: false
};
- var test = makeTest(err);
+ test = makeTest(err);
list([test]);
- var errOut = stdout.join('\n').trim();
+ errOut = stdout.join('\n').trim();
expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar');
});
});
diff --git a/test/reporters/doc.spec.js b/test/reporters/doc.spec.js
index fb2703f83c..857922b83e 100644
--- a/test/reporters/doc.spec.js
+++ b/test/reporters/doc.spec.js
@@ -1,17 +1,10 @@
'use strict';
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
var reporters = require('../../').reporters;
-
var Doc = reporters.Doc;
-var createMockRunner = helpers.createMockRunner;
-var makeRunReporter = helpers.createRunReporterFunction;
-var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN;
-var EVENT_SUITE_END = events.EVENT_SUITE_END;
-var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL;
-var EVENT_TEST_PASS = events.EVENT_TEST_PASS;
+var createMockRunner = require('./helpers.js').createMockRunner;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('Doc reporter', function() {
var runner;
@@ -19,223 +12,178 @@ describe('Doc reporter', function() {
var runReporter = makeRunReporter(Doc);
afterEach(function() {
- runner = null;
+ runner = undefined;
});
- describe('event handlers', function() {
- describe("on 'suite' event", function() {
- describe('when suite root does not exist', function() {
- var expectedTitle = 'expectedTitle';
- var unescapedTitle = '
' + expectedTitle + '
';
- var suite = {
- root: false,
- title: expectedTitle
- };
-
- it('should log html with indents and expected title', function() {
- runner = createMockRunner(
- 'suite',
- EVENT_SUITE_BEGIN,
- null,
- null,
- suite
- );
- var stdout = runReporter(this, runner, options);
- var expectedArray = [
- ' \n',
- ' ' + expectedTitle + '
\n',
- ' \n'
- ];
- expect(stdout, 'to equal', expectedArray);
- });
-
- it('should escape title where necessary', function() {
- var suite = {
- root: false,
- title: unescapedTitle
- };
- expectedTitle =
- '<div>' + expectedTitle + '</div>';
-
- runner = createMockRunner(
- 'suite',
- EVENT_SUITE_BEGIN,
- null,
- null,
- suite
- );
- var stdout = runReporter(this, runner, options);
- var expectedArray = [
- ' \n',
- ' ' + expectedTitle + '
\n',
- ' \n'
- ];
- expect(stdout, 'to equal', expectedArray);
- });
- });
-
- describe('when suite root exists', function() {
- var suite = {
- root: true
- };
-
- it('should not log any html', function() {
- runner = createMockRunner(
- 'suite',
- EVENT_SUITE_BEGIN,
- null,
- null,
- suite
- );
- var stdout = runReporter(this, runner, options);
- expect(stdout, 'to be empty');
- });
- });
- });
-
- describe("on 'suite end' event", function() {
- describe('when suite root does not exist', function() {
- var suite = {
- root: false
- };
-
- it('should log expected html with indents', function() {
- runner = createMockRunner(
- 'suite end',
- EVENT_SUITE_END,
- null,
- null,
- suite
- );
- var stdout = runReporter(this, runner, options);
- var expectedArray = ['
\n', '\n'];
- expect(stdout, 'to equal', expectedArray);
- });
- });
-
- describe('when suite root exists', function() {
- var suite = {
- root: true
- };
-
- it('should not log any html', function() {
- runner = createMockRunner(
- 'suite end',
- EVENT_SUITE_END,
- null,
- null,
- suite
- );
- var stdout = runReporter(this, runner, options);
- expect(stdout, 'to be empty');
- });
- });
- });
-
- describe("on 'pass' event", function() {
- var expectedTitle = 'some tite';
- var expectedBody = 'some body';
- var test = {
- title: expectedTitle,
- body: expectedBody,
- slow: function() {
- return '';
- }
+ describe('on suite', function() {
+ describe('if suite root does not exist', function() {
+ var expectedTitle = 'expectedTitle';
+ var unescapedTitle = '' + expectedTitle + '
';
+ var suite = {
+ root: false,
+ title: expectedTitle
};
-
- it('should log html with indents, expected title, and body', function() {
- runner = createMockRunner('pass', EVENT_TEST_PASS, null, null, test);
+ it('should log html with indents and expected title', function() {
+ runner = createMockRunner('suite', 'suite', null, null, suite);
var stdout = runReporter(this, runner, options);
var expectedArray = [
- ' - ' + expectedTitle + '
\n',
- ' ' + expectedBody + '
\n'
+ ' \n',
+ ' ' + expectedTitle + '
\n',
+ ' \n'
];
expect(stdout, 'to equal', expectedArray);
});
-
- it('should escape title and body where necessary', function() {
- var unescapedTitle = '' + expectedTitle + '
';
- var unescapedBody = '' + expectedBody + '
';
- test.title = unescapedTitle;
- test.body = unescapedBody;
-
- var expectedEscapedTitle =
- '<div>' + expectedTitle + '</div>';
- var expectedEscapedBody =
- '<div>' + expectedBody + '</div>';
- runner = createMockRunner('pass', EVENT_TEST_PASS, null, null, test);
+ it('should escape title where necessary', function() {
+ var suite = {
+ root: false,
+ title: unescapedTitle
+ };
+ expectedTitle = '<div>' + expectedTitle + '</div>';
+ runner = createMockRunner('suite', 'suite', null, null, suite);
var stdout = runReporter(this, runner, options);
var expectedArray = [
- ' - ' + expectedEscapedTitle + '
\n',
- ' ' + expectedEscapedBody + '
\n'
+ ' \n',
+ ' ' + expectedTitle + '
\n',
+ ' \n'
];
expect(stdout, 'to equal', expectedArray);
});
});
-
- describe("on 'fail' event", function() {
- var expectedTitle = 'some tite';
- var expectedBody = 'some body';
- var expectedError = 'some error';
- var test = {
- title: expectedTitle,
- body: expectedBody,
- slow: function() {
- return '';
- }
+ describe('if suite root does exist', function() {
+ var suite = {
+ root: true
};
-
- it('should log html with indents, expected title, body, and error', function() {
- runner = createMockRunner(
- 'fail two args',
- EVENT_TEST_FAIL,
- null,
- null,
- test,
- expectedError
- );
+ it('should not log any html', function() {
+ runner = createMockRunner('suite', 'suite', null, null, suite);
var stdout = runReporter(this, runner, options);
- var expectedArray = [
- ' - ' + expectedTitle + '
\n',
- ' ' +
- expectedBody +
- '
\n',
- ' - ' + expectedError + '
\n'
- ];
- expect(stdout, 'to equal', expectedArray);
+ expect(stdout, 'to be empty');
});
+ });
+ });
- it('should escape title, body, and error where necessary', function() {
- var unescapedTitle = '' + expectedTitle + '
';
- var unescapedBody = '' + expectedBody + '
';
- var unescapedError = '' + expectedError + '
';
- test.title = unescapedTitle;
- test.body = unescapedBody;
-
- var expectedEscapedTitle =
- '<div>' + expectedTitle + '</div>';
- var expectedEscapedBody =
- '<div>' + expectedBody + '</div>';
- var expectedEscapedError =
- '<div>' + expectedError + '</div>';
- runner = createMockRunner(
- 'fail two args',
- EVENT_TEST_FAIL,
- null,
- null,
- test,
- unescapedError
- );
+ describe('on suite end', function() {
+ describe('if suite root does not exist', function() {
+ var suite = {
+ root: false
+ };
+ it('should log expected html with indents', function() {
+ runner = createMockRunner('suite end', 'suite end', null, null, suite);
var stdout = runReporter(this, runner, options);
- var expectedArray = [
- ' - ' + expectedEscapedTitle + '
\n',
- ' ' +
- expectedEscapedBody +
- '
\n',
- ' - ' + expectedEscapedError + '
\n'
- ];
+ var expectedArray = ['
\n', '\n'];
expect(stdout, 'to equal', expectedArray);
});
});
+ describe('if suite root does exist', function() {
+ var suite = {
+ root: true
+ };
+ it('should not log any html', function() {
+ runner = createMockRunner('suite end', 'suite end', null, null, suite);
+ var stdout = runReporter(this, runner, options);
+ expect(stdout, 'to be empty');
+ });
+ });
+ });
+
+ describe('on pass', function() {
+ var expectedTitle = 'some tite';
+ var expectedBody = 'some body';
+ var test = {
+ title: expectedTitle,
+ body: expectedBody,
+ slow: function() {
+ return '';
+ }
+ };
+ it('should log html with indents and expected title and body', function() {
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ var stdout = runReporter(this, runner, options);
+ var expectedArray = [
+ ' - ' + expectedTitle + '
\n',
+ ' ' + expectedBody + '
\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
+ });
+ it('should escape title and body where necessary', function() {
+ var unescapedTitle = '' + expectedTitle + '
';
+ var unescapedBody = '' + expectedBody + '
';
+ test.title = unescapedTitle;
+ test.body = unescapedBody;
+
+ var expectedEscapedTitle =
+ '<div>' + expectedTitle + '</div>';
+ var expectedEscapedBody =
+ '<div>' + expectedBody + '</div>';
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ var stdout = runReporter(this, runner, options);
+ var expectedArray = [
+ ' - ' + expectedEscapedTitle + '
\n',
+ ' ' + expectedEscapedBody + '
\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
+ });
+ });
+
+ describe('on fail', function() {
+ var expectedTitle = 'some tite';
+ var expectedBody = 'some body';
+ var expectedError = 'some error';
+ var test = {
+ title: expectedTitle,
+ body: expectedBody,
+ slow: function() {
+ return '';
+ }
+ };
+ it('should log html with indents and expected title, body and error', function() {
+ runner = createMockRunner(
+ 'fail two args',
+ 'fail',
+ null,
+ null,
+ test,
+ expectedError
+ );
+ var stdout = runReporter(this, runner, options);
+ var expectedArray = [
+ ' - ' + expectedTitle + '
\n',
+ ' ' +
+ expectedBody +
+ '
\n',
+ ' - ' + expectedError + '
\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
+ });
+ it('should escape title, body and error where necessary', function() {
+ var unescapedTitle = '' + expectedTitle + '
';
+ var unescapedBody = '' + expectedBody + '
';
+ var unescapedError = '' + expectedError + '
';
+ test.title = unescapedTitle;
+ test.body = unescapedBody;
+
+ var expectedEscapedTitle =
+ '<div>' + expectedTitle + '</div>';
+ var expectedEscapedBody =
+ '<div>' + expectedBody + '</div>';
+ var expectedEscapedError =
+ '<div>' + expectedError + '</div>';
+ runner = createMockRunner(
+ 'fail two args',
+ 'fail',
+ null,
+ null,
+ test,
+ unescapedError
+ );
+ var stdout = runReporter(this, runner, options);
+ var expectedArray = [
+ ' - ' + expectedEscapedTitle + '
\n',
+ ' ' +
+ expectedEscapedBody +
+ '
\n',
+ ' - ' + expectedEscapedError + '
\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
+ });
});
});
diff --git a/test/reporters/dot.spec.js b/test/reporters/dot.spec.js
index 4a23c7951e..472ec63d01 100644
--- a/test/reporters/dot.spec.js
+++ b/test/reporters/dot.spec.js
@@ -1,238 +1,155 @@
'use strict';
-var sinon = require('sinon');
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
var reporters = require('../../').reporters;
-
-var Base = reporters.Base;
var Dot = reporters.Dot;
-var createMockRunner = helpers.createMockRunner;
-var makeRunReporter = helpers.createRunReporterFunction;
+var Base = reporters.Base;
-var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN;
-var EVENT_RUN_END = events.EVENT_RUN_END;
-var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL;
-var EVENT_TEST_PASS = events.EVENT_TEST_PASS;
-var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING;
+var createMockRunner = require('./helpers.js').createMockRunner;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('Dot reporter', function() {
- var sandbox;
- var windowWidthStub;
+ var runner;
+ var useColors;
+ var windowWidth;
+ var color;
+ var options = {};
var runReporter = makeRunReporter(Dot);
- var noop = function() {};
beforeEach(function() {
- sandbox = sinon.createSandbox();
- windowWidthStub = sandbox.stub(Base.window, 'width').value(0);
- sandbox.stub(Base, 'useColors').value(false);
- sandbox.stub(Base, 'color').callsFake(function(type, str) {
+ useColors = Base.useColors;
+ windowWidth = Base.window.width;
+ color = Base.color;
+ Base.useColors = false;
+ Base.window.width = 0;
+ Base.color = function(type, str) {
return type.replace(/ /g, '-') + '_' + str;
- });
+ };
});
afterEach(function() {
- sandbox.restore();
+ Base.useColors = useColors;
+ Base.window.width = windowWidth;
+ Base.color = color;
+ runner = undefined;
});
- describe('event handlers', function() {
- describe("on 'start' event", function() {
- it('should write a newline', function() {
- var runner = createMockRunner('start', EVENT_RUN_BEGIN);
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- var expectedArray = ['\n'];
+ describe('on start', function() {
+ it('should write a newline', function() {
+ runner = createMockRunner('start', 'start');
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ var expectedArray = ['\n'];
+ expect(stdout, 'to equal', expectedArray);
+ });
+ });
+ describe('on pending', function() {
+ describe('if window width is greater than 1', function() {
+ beforeEach(function() {
+ Base.window.width = 2;
+ });
+ it('should write a newline followed by a comma', function() {
+ runner = createMockRunner('pending', 'pending');
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ var expectedArray = ['\n ', 'pending_' + Base.symbols.comma];
expect(stdout, 'to equal', expectedArray);
});
});
-
- describe("on 'pending' event", function() {
- describe('when window width is greater than 1', function() {
- beforeEach(function() {
- windowWidthStub.value(2);
- });
-
- it('should write a newline followed by a comma', function() {
- var runner = createMockRunner('pending', EVENT_TEST_PENDING);
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- var expectedArray = ['\n ', 'pending_' + Base.symbols.comma];
- expect(stdout, 'to equal', expectedArray);
- });
- });
-
- describe('when window width is less than or equal to 1', function() {
- it('should write a comma', function() {
- var runner = createMockRunner('pending', EVENT_TEST_PENDING);
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- var expectedArray = ['pending_' + Base.symbols.comma];
- expect(stdout, 'to equal', expectedArray);
- });
+ describe('if window width is equal to or less than 1', function() {
+ it('should write a comma', function() {
+ runner = createMockRunner('pending', 'pending');
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ var expectedArray = ['pending_' + Base.symbols.comma];
+ expect(stdout, 'to equal', expectedArray);
});
});
-
- describe("on 'pass' event", function() {
- var test = {
- duration: 1,
- slow: function() {
- return 2;
- }
- };
-
- describe('when window width is greater than 1', function() {
- beforeEach(function() {
- windowWidthStub.value(2);
- });
-
- describe('when test speed is fast', function() {
- it('should write a newline followed by a dot', function() {
- var runner = createMockRunner(
- 'pass',
- EVENT_TEST_PASS,
- null,
- null,
- test
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- expect(test.speed, 'to equal', 'fast');
- var expectedArray = ['\n ', 'fast_' + Base.symbols.dot];
- expect(stdout, 'to equal', expectedArray);
- });
- });
+ });
+ describe('on pass', function() {
+ var test = {
+ duration: 1,
+ slow: function() {
+ return 2;
+ }
+ };
+ describe('if window width is greater than 1', function() {
+ beforeEach(function() {
+ Base.window.width = 2;
});
-
- describe('when window width is less than or equal to 1', function() {
- describe('when test speed is fast', function() {
- it('should write a grey dot', function() {
- var runner = createMockRunner(
- 'pass',
- EVENT_TEST_PASS,
- null,
- null,
- test
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- expect(test.speed, 'to equal', 'fast');
- var expectedArray = ['fast_' + Base.symbols.dot];
- expect(stdout, 'to equal', expectedArray);
- });
- });
-
- describe('when test speed is medium', function() {
- it('should write a yellow dot', function() {
- test.duration = 2;
- var runner = createMockRunner(
- 'pass',
- EVENT_TEST_PASS,
- null,
- null,
- test
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- expect(test.speed, 'to equal', 'medium');
- var expectedArray = ['medium_' + Base.symbols.dot];
- expect(stdout, 'to equal', expectedArray);
- });
- });
-
- describe('when test speed is slow', function() {
- it('should write a bright yellow dot', function() {
- test.duration = 3;
- var runner = createMockRunner(
- 'pass',
- EVENT_TEST_PASS,
- null,
- null,
- test
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- expect(test.speed, 'to equal', 'slow');
- var expectedArray = ['bright-yellow_' + Base.symbols.dot];
- expect(stdout, 'to equal', expectedArray);
- });
+ describe('if test speed is fast', function() {
+ it('should write a newline followed by a dot', function() {
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ expect(test.speed, 'to equal', 'fast');
+ var expectedArray = ['\n ', 'fast_' + Base.symbols.dot];
+ expect(stdout, 'to equal', expectedArray);
});
});
});
-
- describe("on 'fail' event", function() {
- var test = {
- test: {
- err: 'some error'
- }
- };
-
- describe('when window width is greater than 1', function() {
- beforeEach(function() {
- windowWidthStub.value(2);
+ describe('if window width is equal to or less than 1', function() {
+ describe('if test speed is fast', function() {
+ it('should write a grey dot', function() {
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ expect(test.speed, 'to equal', 'fast');
+ var expectedArray = ['fast_' + Base.symbols.dot];
+ expect(stdout, 'to equal', expectedArray);
});
-
- it('should write a newline followed by an exclamation mark', function() {
- var runner = createMockRunner(
- 'fail',
- EVENT_TEST_FAIL,
- null,
- null,
- test
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- var expectedArray = ['\n ', 'fail_' + Base.symbols.bang];
+ });
+ describe('if test speed is medium', function() {
+ it('should write a yellow dot', function() {
+ test.duration = 2;
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ expect(test.speed, 'to equal', 'medium');
+ var expectedArray = ['medium_' + Base.symbols.dot];
expect(stdout, 'to equal', expectedArray);
});
});
-
- describe('when window width is less than or equal to 1', function() {
- it('should write an exclamation mark', function() {
- var runner = createMockRunner(
- 'fail',
- EVENT_TEST_FAIL,
- null,
- null,
- test
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- var expectedArray = ['fail_' + Base.symbols.bang];
+ describe('if test speed is slow', function() {
+ it('should write a bright yellow dot', function() {
+ test.duration = 3;
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ expect(test.speed, 'to equal', 'slow');
+ var expectedArray = ['bright-yellow_' + Base.symbols.dot];
expect(stdout, 'to equal', expectedArray);
});
});
});
-
- describe("on 'end' event", function() {
- it('should call epilogue', function() {
- var runner = createMockRunner('end', EVENT_RUN_END);
- var fakeThis = {
- epilogue: sinon.stub()
- };
- var options = {};
- runReporter(fakeThis, runner, options);
- sandbox.restore();
-
- expect(fakeThis.epilogue.called, 'to be true');
+ });
+ describe('on fail', function() {
+ var test = {
+ test: {
+ err: 'some error'
+ }
+ };
+ describe('if window width is greater than 1', function() {
+ beforeEach(function() {
+ Base.window.width = 2;
+ });
+ it('should write a newline followed by an exclamation mark', function() {
+ runner = createMockRunner('fail', 'fail', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ var expectedArray = ['\n ', 'fail_' + Base.symbols.bang];
+ expect(stdout, 'to equal', expectedArray);
+ });
+ });
+ describe('if window width is equal to or less than 1', function() {
+ it('should write an exclamation mark', function() {
+ runner = createMockRunner('fail', 'fail', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ var expectedArray = ['fail_' + Base.symbols.bang];
+ expect(stdout, 'to equal', expectedArray);
});
});
});
+ describe('on end', function() {
+ it('should call the epilogue', function() {
+ runner = createMockRunner('end', 'end');
+ var epilogueCalled = false;
+ var epilogue = function() {
+ epilogueCalled = true;
+ };
+ runReporter({epilogue: epilogue}, runner, options);
+ expect(epilogueCalled, 'to be', true);
+ });
+ });
});
diff --git a/test/reporters/helpers.js b/test/reporters/helpers.js
index 76b3d79307..5cb21a53f2 100644
--- a/test/reporters/helpers.js
+++ b/test/reporters/helpers.js
@@ -1,22 +1,17 @@
'use strict';
-var sinon = require('sinon');
var errors = require('../../lib/errors');
-var createStatsCollector = require('../../lib/stats-collector');
-
var createUnsupportedError = errors.createUnsupportedError;
+/*
+ This function prevents the constant use of creating a runnerEvent.
+ runStr is the argument that defines the runnerEvent.
+ ifStr1 is one possible reporter argument, as is ifStr2, and ifStr3
+ arg1 and arg2 are the possible variables that need to be put into the
+ scope of this function for the tests to run properly.
+*/
+
+var createStatsCollector = require('../../lib/stats-collector');
-/**
- * Creates a mock runner object.
- *
- * @param {string} runStr - argument that defines the runnerEvent
- * @param {string} ifStr1 - runner event
- * @param {(string|null)} [ifStr2] - runner event
- * @param {(string|null)} [ifStr3] - runner event
- * @param {(*|null)} [arg1] - variable to be added to event handler's scope
- * @param {(*|null)} [arg2] - variable to be added to event handler's scope
- * @return {Object} mock runner instance
- */
function createMockRunner(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) {
var runnerFunction = createRunnerFunction(
runStr,
@@ -34,20 +29,6 @@ function createMockRunner(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) {
return mockRunner;
}
-/**
- * Creates an event handler function to be used by the runner.
- *
- * @description
- * Arguments 'ifStr1', 'ifStr2', and 'ifStr3' should be `Runner.constants`.
- *
- * @param {string} runStr - argument that defines the runnerEvent
- * @param {string} ifStr1 - runner event
- * @param {(string|null)} [ifStr2] - runner event
- * @param {(string|null)} [ifStr3] - runner event
- * @param {(*|null)} [arg1] - variable to be added to event handler's scope
- * @param {(*|null)} [arg2] - variable to be added to event handler's scope
- * @return {Function} event handler for the requested runner events
- */
function createRunnerFunction(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) {
var test = null;
switch (runStr) {
@@ -197,35 +178,23 @@ function createRunReporterFunction(ctor) {
* @return {string[]} Lines of output written to `stdout`
*/
var runReporter = function(stubSelf, runner, options, tee) {
- var origStdoutWrite = process.stdout.write;
- var stdoutWriteStub = sinon.stub(process.stdout, 'write');
var stdout = [];
- var gather = function(chunk, enc, callback) {
- stdout.push(chunk);
+ // Reassign stream in order to make a copy of all reporter output
+ var stdoutWrite = process.stdout.write;
+ process.stdout.write = function(string, enc, callback) {
+ stdout.push(string);
if (tee) {
- origStdoutWrite.call(process.stdout, chunk);
+ stdoutWrite.call(process.stdout, string, enc, callback);
}
};
- // Reassign stream in order to make a copy of all reporter output
- stdoutWriteStub.callsFake(gather);
-
- // Give `stubSelf` access to `ctor` prototype chain
- Object.setPrototypeOf(stubSelf, ctor.prototype);
+ // Invoke reporter
+ ctor.call(stubSelf, runner, options);
- try {
- try {
- // Invoke reporter
- ctor.call(stubSelf, runner, options);
- } finally {
- // Revert stream reassignment here so reporter output
- // can't be corrupted if any test assertions throw
- stdoutWriteStub.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
+ // Revert stream reassignment here so reporter output
+ // can't be corrupted if any test assertions throw
+ process.stdout.write = stdoutWrite;
return stdout;
};
diff --git a/test/reporters/json-stream.spec.js b/test/reporters/json-stream.spec.js
index de83f861b2..8c9fcfff35 100644
--- a/test/reporters/json-stream.spec.js
+++ b/test/reporters/json-stream.spec.js
@@ -1,22 +1,15 @@
'use strict';
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
var reporters = require('../../').reporters;
-var utils = require('../../lib/utils');
-
var JSONStream = reporters.JSONStream;
-var createMockRunner = helpers.createMockRunner;
-var dQuote = utils.dQuote;
-var makeExpectedTest = helpers.makeExpectedTest;
-var makeRunReporter = helpers.createRunReporterFunction;
-var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN;
-var EVENT_RUN_END = events.EVENT_RUN_END;
-var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL;
-var EVENT_TEST_PASS = events.EVENT_TEST_PASS;
+var createMockRunner = require('./helpers').createMockRunner;
+var makeExpectedTest = require('./helpers').makeExpectedTest;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('JSON Stream reporter', function() {
+ var runner;
+ var options = {};
var runReporter = makeRunReporter(JSONStream);
var expectedTitle = 'some title';
var expectedFullTitle = 'full title';
@@ -34,126 +27,119 @@ describe('JSON Stream reporter', function() {
message: expectedErrorMessage
};
- describe('event handlers', function() {
- describe("on 'start' event", function() {
- it('should write stringified start with expected total', function() {
- var runner = createMockRunner('start', EVENT_RUN_BEGIN);
- var expectedTotal = 12;
- runner.total = expectedTotal;
- var options = {};
- var stdout = runReporter({}, runner, options);
+ afterEach(function() {
+ runner = undefined;
+ });
- expect(
- stdout[0],
- 'to equal',
- '["start",{"total":' + expectedTotal + '}]\n'
- );
- });
+ describe('on start', function() {
+ it('should write stringified start with expected total', function() {
+ runner = createMockRunner('start', 'start');
+ var expectedTotal = 12;
+ runner.total = expectedTotal;
+ var stdout = runReporter({}, runner, options);
+
+ expect(
+ stdout[0],
+ 'to equal',
+ '["start",{"total":' + expectedTotal + '}]\n'
+ );
+ });
+ });
+
+ describe('on pass', function() {
+ it('should write stringified test data', function() {
+ runner = createMockRunner('pass', 'pass', null, null, expectedTest);
+ var stdout = runReporter({}, runner, options);
+
+ expect(
+ stdout[0],
+ 'to equal',
+ '["pass",{"title":"' +
+ expectedTitle +
+ '","fullTitle":"' +
+ expectedFullTitle +
+ '","duration":' +
+ expectedDuration +
+ ',"currentRetry":' +
+ currentRetry +
+ '}]\n'
+ );
});
+ });
- describe("on 'pass' event", function() {
- it('should write stringified test data', function() {
- var runner = createMockRunner(
- 'pass',
- EVENT_TEST_PASS,
+ describe('on fail', function() {
+ describe('if error stack exists', function() {
+ it('should write stringified test data with error data', function() {
+ expectedError.stack = expectedErrorStack;
+ runner = createMockRunner(
+ 'fail two args',
+ 'fail',
null,
null,
- expectedTest
+ expectedTest,
+ expectedError
);
- var options = {};
+
var stdout = runReporter({}, runner, options);
expect(
stdout[0],
'to equal',
- '["pass",{"title":' +
- dQuote(expectedTitle) +
- ',"fullTitle":' +
- dQuote(expectedFullTitle) +
- ',"duration":' +
+ '["fail",{"title":"' +
+ expectedTitle +
+ '","fullTitle":"' +
+ expectedFullTitle +
+ '","duration":' +
expectedDuration +
',"currentRetry":' +
currentRetry +
- '}]\n'
+ ',"err":"' +
+ expectedErrorMessage +
+ '","stack":"' +
+ expectedErrorStack +
+ '"}]\n'
);
});
});
- describe("on 'fail' event", function() {
- describe('when error stack exists', function() {
- it('should write stringified test data with error data', function() {
- expectedError.stack = expectedErrorStack;
- var runner = createMockRunner(
- 'fail two args',
- EVENT_TEST_FAIL,
- null,
- null,
- expectedTest,
- expectedError
- );
- var options = {};
- var stdout = runReporter({}, runner, options);
-
- expect(
- stdout[0],
- 'to equal',
- '["fail",{"title":' +
- dQuote(expectedTitle) +
- ',"fullTitle":' +
- dQuote(expectedFullTitle) +
- ',"duration":' +
- expectedDuration +
- ',"currentRetry":' +
- currentRetry +
- ',"err":' +
- dQuote(expectedErrorMessage) +
- ',"stack":' +
- dQuote(expectedErrorStack) +
- '}]\n'
- );
- });
- });
+ describe('if error stack does not exist', function() {
+ it('should write stringified test data with error data', function() {
+ expectedError.stack = null;
+ runner = createMockRunner(
+ 'fail two args',
+ 'fail',
+ null,
+ null,
+ expectedTest,
+ expectedError
+ );
- describe('when error stack does not exist', function() {
- it('should write stringified test data with error data', function() {
- expectedError.stack = null;
- var runner = createMockRunner(
- 'fail two args',
- EVENT_TEST_FAIL,
- null,
- null,
- expectedTest,
- expectedError
- );
- var options = {};
- var stdout = runReporter(this, runner, options);
+ var stdout = runReporter(this, runner, options);
- expect(
- stdout[0],
- 'to equal',
- '["fail",{"title":' +
- dQuote(expectedTitle) +
- ',"fullTitle":' +
- dQuote(expectedFullTitle) +
- ',"duration":' +
- expectedDuration +
- ',"currentRetry":' +
- currentRetry +
- ',"err":' +
- dQuote(expectedErrorMessage) +
- ',"stack":null}]\n'
- );
- });
+ expect(
+ stdout[0],
+ 'to equal',
+ '["fail",{"title":"' +
+ expectedTitle +
+ '","fullTitle":"' +
+ expectedFullTitle +
+ '","duration":' +
+ expectedDuration +
+ ',"currentRetry":' +
+ currentRetry +
+ ',"err":"' +
+ expectedErrorMessage +
+ '","stack":null}]\n'
+ );
});
});
+ });
- describe("on 'end' event", function() {
- it('should write summary statistics', function() {
- var runner = createMockRunner('end', EVENT_RUN_END);
- var options = {};
- var stdout = runReporter(this, runner, options);
- expect(stdout[0], 'to match', /end/);
- });
+ describe('on end', function() {
+ it('should write end details', function() {
+ runner = createMockRunner('end', 'end');
+ var stdout = runReporter(this, runner, options);
+ expect(stdout[0], 'to match', /end/);
});
});
});
diff --git a/test/reporters/json.spec.js b/test/reporters/json.spec.js
index f6299dd134..5d7a37c564 100644
--- a/test/reporters/json.spec.js
+++ b/test/reporters/json.spec.js
@@ -7,11 +7,8 @@ var Runner = Mocha.Runner;
var Test = Mocha.Test;
describe('JSON reporter', function() {
- var sandbox;
- var suite;
- var runner;
+ var suite, runner;
var testTitle = 'json test 1';
- var noop = function() {};
beforeEach(function() {
var mocha = new Mocha({
@@ -19,18 +16,8 @@ describe('JSON reporter', function() {
});
suite = new Suite('JSON suite', 'root');
runner = new Runner(suite);
- var options = {};
/* eslint no-unused-vars: off */
- var mochaReporter = new mocha._reporter(runner, options);
- });
-
- beforeEach(function() {
- sandbox = sinon.createSandbox();
- sandbox.stub(process.stdout, 'write').callsFake(noop);
- });
-
- afterEach(function() {
- sandbox.restore();
+ var mochaReporter = new mocha._reporter(runner);
});
it('should have 1 test failure', function(done) {
@@ -42,8 +29,9 @@ describe('JSON reporter', function() {
})
);
+ var stdoutWrite = sinon.stub(process.stdout, 'write');
runner.run(function(failureCount) {
- sandbox.restore();
+ stdoutWrite.restore();
expect(runner, 'to satisfy', {
testResults: {
failures: [
@@ -64,8 +52,9 @@ describe('JSON reporter', function() {
it('should have 1 test pending', function(done) {
suite.addTest(new Test(testTitle));
+ var stdoutWrite = sinon.stub(process.stdout, 'write');
runner.run(function(failureCount) {
- sandbox.restore();
+ stdoutWrite.restore();
expect(runner, 'to satisfy', {
testResults: {
pending: [
@@ -94,8 +83,9 @@ describe('JSON reporter', function() {
})
);
+ var stdoutWrite = sinon.stub(process.stdout, 'write');
runner.run(function(failureCount) {
- sandbox.restore();
+ stdoutWrite.restore();
expect(runner, 'to satisfy', {
testResults: {
failures: [
diff --git a/test/reporters/landing.spec.js b/test/reporters/landing.spec.js
index acb2ee3ef6..dd73d9e5b3 100644
--- a/test/reporters/landing.spec.js
+++ b/test/reporters/landing.spec.js
@@ -1,25 +1,20 @@
'use strict';
-var sinon = require('sinon');
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
-var reporters = require('../../').reporters;
-var states = require('../../').Runnable.constants;
-
-var Base = reporters.Base;
+var sandbox = require('sinon').createSandbox();
+var Mocha = require('../..');
+var reporters = Mocha.reporters;
var Landing = reporters.Landing;
-var createMockRunner = helpers.createMockRunner;
-var makeRunReporter = helpers.createRunReporterFunction;
-
-var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN;
-var EVENT_RUN_END = events.EVENT_RUN_END;
-var EVENT_TEST_END = events.EVENT_TEST_END;
+var constants = Mocha.Runnable.constants;
+var STATE_FAILED = constants.STATE_FAILED;
+var STATE_PASSED = constants.STATE_PASSED;
+var Base = reporters.Base;
-var STATE_FAILED = states.STATE_FAILED;
-var STATE_PASSED = states.STATE_PASSED;
+var createMockRunner = require('./helpers').createMockRunner;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('Landing reporter', function() {
- var sandbox;
+ var runner;
+ var options = {};
var runReporter = makeRunReporter(Landing);
var resetCode = '\u001b[0m';
var expectedArray = [
@@ -34,98 +29,73 @@ describe('Landing reporter', function() {
];
beforeEach(function() {
- sandbox = sinon.createSandbox();
sandbox.stub(Base, 'useColors').value(false);
sandbox.stub(Base.window, 'width').value(1);
});
afterEach(function() {
sandbox.restore();
+ runner = undefined;
});
- describe('event handlers', function() {
- describe("on 'start' event", function() {
- it('should write newlines', function() {
- sandbox.stub(Base.cursor, 'hide');
+ describe('on start', function() {
+ it('should write new lines', function() {
+ sandbox.stub(Base.cursor, 'hide');
- var runner = createMockRunner('start', EVENT_RUN_BEGIN);
- var options = {};
- var stdout = runReporter({}, runner, options);
- sandbox.restore();
+ runner = createMockRunner('start', 'start');
+ var stdout = runReporter({}, runner, options);
- expect(stdout[0], 'to equal', '\n\n\n ');
- });
+ expect(stdout[0], 'to equal', '\n\n\n ');
+ });
- it('should call cursor hide', function() {
- var hideCursorStub = sandbox.stub(Base.cursor, 'hide');
+ it('should call cursor hide', function() {
+ sandbox.stub(Base.cursor, 'hide');
- var runner = createMockRunner('start', EVENT_RUN_BEGIN);
- var options = {};
- runReporter({}, runner, options);
- sandbox.restore();
+ runner = createMockRunner('start', 'start');
+ runReporter({}, runner, options);
- expect(hideCursorStub.called, 'to be true');
- });
+ expect(Base.cursor.hide, 'was called');
});
+ });
- describe("on 'test end' event", function() {
- describe('when test passes', function() {
- it('should write expected landing strip', function() {
- var test = {
- state: STATE_PASSED
- };
- var runner = createMockRunner(
- 'test end',
- EVENT_TEST_END,
- null,
- null,
- test
- );
- var options = {};
- var stdout = runReporter({}, runner, options);
- sandbox.restore();
-
- expect(stdout, 'to equal', expectedArray);
- });
+ describe('on test end', function() {
+ describe('if test has failed', function() {
+ it('should write expected landing strip', function() {
+ var test = {
+ state: STATE_FAILED
+ };
+ runner = createMockRunner('test end', 'test end', null, null, test);
+ runner.total = 12;
+ var stdout = runReporter({}, runner, options);
+
+ expect(stdout, 'to equal', expectedArray);
});
+ });
+ describe('if test has not failed', function() {
+ it('should write expected landing strip', function() {
+ var test = {
+ state: STATE_PASSED
+ };
+ runner = createMockRunner('test end', 'test end', null, null, test);
- describe('when test fails', function() {
- it('should write expected landing strip', function() {
- var test = {
- state: STATE_FAILED
- };
- var runner = createMockRunner(
- 'test end',
- EVENT_TEST_END,
- null,
- null,
- test
- );
- runner.total = 12;
- var options = {};
- var stdout = runReporter({}, runner, options);
- sandbox.restore();
-
- expect(stdout, 'to equal', expectedArray);
- });
+ var stdout = runReporter({}, runner, options);
+
+ expect(stdout, 'to equal', expectedArray);
});
});
+ });
+ describe('on end', function() {
+ it('should call cursor show and epilogue', function() {
+ var reporterStub = {epilogue: function() {}};
+ sandbox.stub(Base.cursor, 'show');
+ sandbox.stub(reporterStub, 'epilogue');
- describe("on 'end' event", function() {
- it('should call cursor show and epilogue', function() {
- var showCursorStub = sandbox.stub(Base.cursor, 'show');
+ runner = createMockRunner('end', 'end');
- var fakeThis = {
- epilogue: sinon.spy()
- };
- var runner = createMockRunner('end', EVENT_RUN_END);
- var options = {};
- runReporter(fakeThis, runner, options);
- sandbox.restore();
+ runReporter(reporterStub, runner, options);
- expect(fakeThis.epilogue.calledOnce, 'to be true');
- expect(showCursorStub.called, 'to be true');
- });
+ expect(reporterStub.epilogue, 'was called');
+ expect(Base.cursor.show, 'was called');
});
});
});
diff --git a/test/reporters/list.spec.js b/test/reporters/list.spec.js
index c10272e953..c9eceb87fe 100644
--- a/test/reporters/list.spec.js
+++ b/test/reporters/list.spec.js
@@ -1,246 +1,144 @@
'use strict';
-var sinon = require('sinon');
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
+var sandbox = require('sinon').createSandbox();
var reporters = require('../../').reporters;
-
-var Base = reporters.Base;
var List = reporters.List;
-var createMockRunner = helpers.createMockRunner;
-var makeRunReporter = helpers.createRunReporterFunction;
+var Base = reporters.Base;
-var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN;
-var EVENT_RUN_END = events.EVENT_RUN_END;
-var EVENT_TEST_BEGIN = events.EVENT_TEST_BEGIN;
-var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL;
-var EVENT_TEST_PASS = events.EVENT_TEST_PASS;
-var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING;
+var createMockRunner = require('./helpers').createMockRunner;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('List reporter', function() {
- var sandbox;
+ var runner;
+ var options = {};
var runReporter = makeRunReporter(List);
var expectedTitle = 'some title';
var expectedDuration = 100;
- var noop = function() {};
var test = {
fullTitle: function() {
return expectedTitle;
},
duration: expectedDuration,
- slow: noop
+ slow: function() {}
};
beforeEach(function() {
- sandbox = sinon.createSandbox();
sandbox.stub(Base, 'useColors').value(false);
});
afterEach(function() {
sandbox.restore();
+ runner = undefined;
});
- describe('event handlers', function() {
- describe("on 'start' and 'test' events", function() {
- it('should write expected newline and title', function() {
- var runner = createMockRunner(
- 'start test',
- EVENT_RUN_BEGIN,
- EVENT_TEST_BEGIN,
- null,
- test
- );
- var options = {};
- var fakeThis = {
- epilogue: noop
- };
- var stdout = runReporter(fakeThis, runner, options);
- sandbox.restore();
-
- var startString = '\n';
- var testString = ' ' + expectedTitle + ': ';
- var expectedArray = [startString, testString];
- expect(stdout, 'to equal', expectedArray);
- });
+ describe('on start and test', function() {
+ it('should write expected new line and title to the console', function() {
+ runner = createMockRunner('start test', 'start', 'test', null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+
+ var startString = '\n';
+ var testString = ' ' + expectedTitle + ': ';
+ var expectedArray = [startString, testString];
+ expect(stdout, 'to equal', expectedArray);
});
+ });
+ describe('on pending', function() {
+ it('should write expected title to the console', function() {
+ runner = createMockRunner('pending test', 'pending', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
- describe("on 'pending' event", function() {
- it('should write expected title', function() {
- var runner = createMockRunner(
- 'pending test',
- EVENT_TEST_PENDING,
- null,
- null,
- test
- );
- var options = {};
- var fakeThis = {
- epilogue: noop
- };
- var stdout = runReporter(fakeThis, runner, options);
- sandbox.restore();
-
- expect(stdout[0], 'to equal', ' - ' + expectedTitle + '\n');
- });
+ expect(stdout[0], 'to equal', ' - ' + expectedTitle + '\n');
});
+ });
+ describe('on pass', function() {
+ it('should call cursor CR', function() {
+ sandbox.stub(Base.cursor, 'CR');
- describe("on 'pass' event", function() {
- var crStub;
-
- beforeEach(function() {
- crStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop);
- });
-
- it('should call cursor CR', function() {
- var runner = createMockRunner(
- 'pass',
- EVENT_TEST_PASS,
- null,
- null,
- test
- );
- var options = {};
- var fakeThis = {
- epilogue: noop
- };
- runReporter(fakeThis, runner, options);
- sandbox.restore();
-
- expect(crStub.called, 'to be true');
- });
-
- it('should write expected symbol, title, and duration', function() {
- var expectedOkSymbol = 'OK';
- sandbox.stub(Base.symbols, 'ok').value(expectedOkSymbol);
-
- var runner = createMockRunner(
- 'pass',
- EVENT_TEST_PASS,
- null,
- null,
- test
- );
- var options = {};
- var fakeThis = {
- epilogue: noop
- };
- var stdout = runReporter(fakeThis, runner, options);
- sandbox.restore();
-
- expect(
- stdout[0],
- 'to be',
- ' ' +
- expectedOkSymbol +
- ' ' +
- expectedTitle +
- ': ' +
- expectedDuration +
- 'ms\n'
- );
- });
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ runReporter({epilogue: function() {}}, runner, options);
+
+ expect(Base.cursor.CR, 'was called');
+ });
+ it('should write expected symbol, title and duration to the console', function() {
+ var expectedOkSymbol = 'OK';
+ sandbox.stub(Base.symbols, 'ok').value(expectedOkSymbol);
+ sandbox.stub(Base.cursor, 'CR');
+
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+
+ expect(
+ stdout[0],
+ 'to be',
+ ' ' +
+ expectedOkSymbol +
+ ' ' +
+ expectedTitle +
+ ': ' +
+ expectedDuration +
+ 'ms\n'
+ );
});
+ });
+ describe('on fail', function() {
+ it('should call cursor CR', function() {
+ sandbox.stub(Base.cursor, 'CR');
+
+ runner = createMockRunner('fail', 'fail', null, null, test);
+ runReporter({epilogue: function() {}}, runner, options);
- describe("on 'fail' event", function() {
- var crStub;
-
- beforeEach(function() {
- crStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop);
- });
-
- it('should call cursor CR', function() {
- var runner = createMockRunner(
- 'fail',
- EVENT_TEST_FAIL,
- null,
- null,
- test
- );
- var options = {};
- var fakeThis = {
- epilogue: noop
- };
- runReporter(fakeThis, runner, options);
- sandbox.restore();
-
- expect(crStub.called, 'to be true');
- });
-
- it('should write expected error number and title', function() {
- var expectedErrorCount = 1;
- var runner = createMockRunner(
- 'fail',
- EVENT_TEST_FAIL,
- null,
- null,
- test
- );
- var options = {};
- var fakeThis = {
- epilogue: noop
- };
- var stdout = runReporter(fakeThis, runner, options);
- sandbox.restore();
-
- expect(
- stdout[0],
- 'to be',
- ' ' + expectedErrorCount + ') ' + expectedTitle + '\n'
- );
- });
-
- it('should immediately construct fail strings', function() {
- var actual = {a: 'actual'};
- var expected = {a: 'expected'};
- var checked = false;
- var err;
- test = {};
-
- var runner = createMockRunner(
- 'fail',
- EVENT_TEST_FAIL,
- null,
- null,
- test
- );
- runner.on = runner.once = function(event, callback) {
- if (
- !checked &&
- event === 'fail' &&
- callback.toString().includes('stringifyDiffObjs') // target correct fail event callback
- ) {
- err = new Error('fake failure object with actual/expected');
- err.actual = actual;
- err.expected = expected;
- err.showDiff = true;
- callback(test, err);
- checked = true;
- }
- };
- var options = {};
- var fakeThis = {
- epilogue: noop
- };
- runReporter(fakeThis, runner, options);
- sandbox.restore();
-
- expect(typeof err.actual, 'to be', 'string');
- expect(typeof err.expected, 'to be', 'string');
- });
+ expect(Base.cursor.CR, 'was called');
+ });
+ it('should write expected error number and title', function() {
+ sandbox.stub(Base.cursor, 'CR');
+
+ var expectedErrorCount = 1;
+ runner = createMockRunner('fail', 'fail', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+
+ expect(
+ stdout[0],
+ 'to be',
+ ' ' + expectedErrorCount + ') ' + expectedTitle + '\n'
+ );
+ });
+ it('should immediately construct fail strings', function() {
+ var actual = {a: 'actual'};
+ var expected = {a: 'expected'};
+ var checked = false;
+ var err;
+ test = {};
+ runner = createMockRunner('fail', 'fail', null, null, test);
+ runner.on = runner.once = function(event, callback) {
+ if (
+ !checked &&
+ event === 'fail' &&
+ callback.toString().includes('stringifyDiffObjs') // target correct fail event callback
+ ) {
+ err = new Error('fake failure object with actual/expected');
+ err.actual = actual;
+ err.expected = expected;
+ err.showDiff = true;
+ callback(test, err);
+ checked = true;
+ }
+ };
+ runReporter({epilogue: function() {}}, runner, options);
+
+ expect(typeof err.actual, 'to be', 'string');
+ expect(typeof err.expected, 'to be', 'string');
});
+ });
+
+ describe('on end', function() {
+ it('should call epilogue', function() {
+ var reporterStub = {epilogue: function() {}};
+ sandbox.stub(reporterStub, 'epilogue');
+
+ runner = createMockRunner('end', 'end');
+ runReporter(reporterStub, runner, options);
- describe("on 'end' event", function() {
- it('should call epilogue', function() {
- var runner = createMockRunner('end', EVENT_RUN_END);
- var options = {};
- var fakeThis = {
- epilogue: sinon.spy()
- };
- runReporter(fakeThis, runner, options);
- sandbox.restore();
-
- expect(fakeThis.epilogue.calledOnce, 'to be true');
- });
+ expect(reporterStub.epilogue, 'was called');
});
});
});
diff --git a/test/reporters/markdown.spec.js b/test/reporters/markdown.spec.js
index e068c58cea..842d7c7643 100644
--- a/test/reporters/markdown.spec.js
+++ b/test/reporters/markdown.spec.js
@@ -1,115 +1,102 @@
'use strict';
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
var reporters = require('../../').reporters;
-
var Markdown = reporters.Markdown;
-var createMockRunner = helpers.createMockRunner;
-var makeRunReporter = helpers.createRunReporterFunction;
-var EVENT_RUN_END = events.EVENT_RUN_END;
-var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN;
-var EVENT_SUITE_END = events.EVENT_SUITE_END;
-var EVENT_TEST_PASS = events.EVENT_TEST_PASS;
+var createMockRunner = require('./helpers').createMockRunner;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('Markdown reporter', function() {
+ var runner;
+ var options = {};
var runReporter = makeRunReporter(Markdown);
var expectedTitle = 'expected title';
var expectedFullTitle = 'full title';
var sluggedFullTitle = 'full-title';
- var noop = function() {};
- describe('event handlers', function() {
- describe("on 'suite' event", function() {
- it("should write expected slugged titles on 'end' event", function() {
- var expectedSuite = {
- title: expectedTitle,
- fullTitle: function() {
- return expectedFullTitle;
- },
- suites: [
- {
- title: expectedTitle,
- fullTitle: function() {
- return expectedFullTitle;
- },
- suites: []
- }
- ]
- };
- var runner = createMockRunner(
- 'suite suite end',
- EVENT_SUITE_BEGIN,
- EVENT_SUITE_END,
- EVENT_RUN_END,
- expectedSuite
- );
- runner.suite = expectedSuite;
- var options = {};
- var stdout = runReporter({}, runner, options);
+ afterEach(function() {
+ runner = undefined;
+ });
- var expectedArray = [
- '# TOC\n',
- ' - [' +
- expectedTitle +
- '](#' +
- sluggedFullTitle +
- ')\n - [' +
- expectedTitle +
- '](#' +
- sluggedFullTitle +
- ')\n',
- '\n ' + expectedTitle + '\n'
- ];
+ describe("on 'suite'", function() {
+ it("should write expected slugged titles on 'end' event", function() {
+ var expectedSuite = {
+ title: expectedTitle,
+ fullTitle: function() {
+ return expectedFullTitle;
+ },
+ suites: [
+ {
+ title: expectedTitle,
+ fullTitle: function() {
+ return expectedFullTitle;
+ },
+ suites: []
+ }
+ ]
+ };
+ runner = createMockRunner(
+ 'suite suite end',
+ 'suite',
+ 'suite end',
+ 'end',
+ expectedSuite
+ );
+ runner.suite = expectedSuite;
+ var stdout = runReporter({}, runner, options);
- expect(stdout, 'to equal', expectedArray);
- });
- });
+ var expectedArray = [
+ '# TOC\n',
+ ' - [' +
+ expectedTitle +
+ '](#' +
+ sluggedFullTitle +
+ ')\n - [' +
+ expectedTitle +
+ '](#' +
+ sluggedFullTitle +
+ ')\n',
+ '\n ' + expectedTitle + '\n'
+ ];
- describe("on 'pass' event", function() {
- it("should write test code inside js code block, on 'end' event", function() {
- var expectedSuite = {
- title: expectedTitle,
- fullTitle: function() {
- return expectedFullTitle;
- },
- suites: []
- };
- var expectedDuration = 1000;
- var currentRetry = 1;
- var expectedBody = 'some body';
- var expectedTest = {
- title: expectedTitle,
- fullTitle: function() {
- return expectedFullTitle;
- },
- duration: expectedDuration,
- currentRetry: function() {
- return currentRetry;
- },
- slow: noop,
- body: expectedBody
- };
- var runner = createMockRunner(
- 'pass end',
- EVENT_TEST_PASS,
- EVENT_RUN_END,
- null,
- expectedTest
- );
- runner.suite = expectedSuite;
- var options = {};
- var stdout = runReporter({}, runner, options);
+ expect(stdout, 'to equal', expectedArray);
+ });
+ });
+ describe("on 'pass'", function() {
+ it("should write test code inside js code block, on 'end' event", function() {
+ var expectedSuite = {
+ title: expectedTitle,
+ fullTitle: function() {
+ return expectedFullTitle;
+ },
+ suites: []
+ };
+ var expectedDuration = 1000;
+ var currentRetry = 1;
+ var expectedBody = 'some body';
+ var expectedTest = {
+ title: expectedTitle,
+ fullTitle: function() {
+ return expectedFullTitle;
+ },
+ duration: expectedDuration,
+ currentRetry: function() {
+ return currentRetry;
+ },
+ slow: function() {},
+ body: expectedBody
+ };
+ runner = createMockRunner('pass end', 'pass', 'end', null, expectedTest);
+ runner.suite = expectedSuite;
+ var stdout = runReporter({}, runner, options);
- var expectedArray = [
- '# TOC\n',
- ' - [' + expectedTitle + '](#' + sluggedFullTitle + ')\n',
- expectedTitle + '.\n\n```js\n' + expectedBody + '\n```\n\n'
- ];
+ var expectedArray = [
+ '# TOC\n',
+ ' - [' + expectedTitle + '](#' + sluggedFullTitle + ')\n',
+ expectedTitle + '.\n\n```js\n' + expectedBody + '\n```\n\n'
+ ];
- expect(stdout, 'to equal', expectedArray);
- });
+ expect(stdout, 'to equal', expectedArray);
});
});
});
diff --git a/test/reporters/min.spec.js b/test/reporters/min.spec.js
index 1fe46333cf..f88adf31d7 100644
--- a/test/reporters/min.spec.js
+++ b/test/reporters/min.spec.js
@@ -1,47 +1,45 @@
'use strict';
-var sinon = require('sinon');
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
var reporters = require('../../').reporters;
-
var Min = reporters.Min;
-var createMockRunner = helpers.createMockRunner;
-var makeRunReporter = helpers.createRunReporterFunction;
-var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN;
-var EVENT_RUN_END = events.EVENT_RUN_END;
+var createMockRunner = require('./helpers').createMockRunner;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('Min reporter', function() {
+ var runner;
+ var options = {};
var runReporter = makeRunReporter(Min);
- var noop = function() {};
-
- describe('event handlers', function() {
- describe("on 'start' event", function() {
- it('should clear screen then set cursor position', function() {
- var runner = createMockRunner('start', EVENT_RUN_BEGIN);
- var options = {};
- var fakeThis = {
- epilogue: noop
- };
- var stdout = runReporter(fakeThis, runner, options);
-
- var expectedArray = ['\u001b[2J', '\u001b[1;3H'];
- expect(stdout, 'to equal', expectedArray);
- });
+
+ afterEach(function() {
+ runner = undefined;
+ });
+
+ describe('on start', function() {
+ it('should clear screen then set cursor position', function() {
+ runner = createMockRunner('start', 'start');
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+
+ var expectedArray = ['\u001b[2J', '\u001b[1;3H'];
+ expect(stdout, 'to equal', expectedArray);
});
+ });
- describe("on 'end' event", function() {
- it('should call epilogue', function() {
- var fakeThis = {
- epilogue: sinon.stub().callsFake(noop)
- };
- var runner = createMockRunner('end', EVENT_RUN_END);
- var options = {};
- runReporter(fakeThis, runner, options);
-
- expect(fakeThis.epilogue.called, 'to be true');
- });
+ describe('on end', function() {
+ it('should call epilogue', function() {
+ var calledEpilogue = false;
+ runner = createMockRunner('end', 'end');
+ runReporter(
+ {
+ epilogue: function() {
+ calledEpilogue = true;
+ }
+ },
+ runner,
+ options
+ );
+
+ expect(calledEpilogue, 'to be', true);
});
});
});
diff --git a/test/reporters/nyan.spec.js b/test/reporters/nyan.spec.js
index 05d2e1bf77..b1ad3a22a3 100644
--- a/test/reporters/nyan.spec.js
+++ b/test/reporters/nyan.spec.js
@@ -1,205 +1,172 @@
'use strict';
-var sinon = require('sinon');
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
+var sandbox = require('sinon').createSandbox();
var reporters = require('../../').reporters;
-
-var Base = reporters.Base;
var NyanCat = reporters.Nyan;
-var createMockRunner = helpers.createMockRunner;
-var makeRunReporter = helpers.createRunReporterFunction;
+var Base = reporters.Base;
-var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN;
-var EVENT_RUN_END = events.EVENT_RUN_END;
-var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL;
-var EVENT_TEST_PASS = events.EVENT_TEST_PASS;
-var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING;
+var createMockRunner = require('./helpers').createMockRunner;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('Nyan reporter', function() {
- var sandbox;
- var noop = function() {};
-
- beforeEach(function() {
- sandbox = sinon.createSandbox();
- });
-
- afterEach(function() {
- sandbox.restore();
- });
-
- describe('event handlers', function() {
+ describe('events', function() {
+ var runner;
+ var options = {};
var runReporter = makeRunReporter(NyanCat);
- describe("on 'start' event", function() {
+ afterEach(function() {
+ sandbox.restore();
+ runner = undefined;
+ });
+
+ describe('on start', function() {
it('should call draw', function() {
- var fakeThis = {
- draw: sinon.stub().callsFake(noop),
- generateColors: noop
+ var reporterStub = {
+ draw: function() {},
+ generateColors: function() {}
};
+ sandbox.stub(reporterStub, 'draw');
- var runner = createMockRunner('start', EVENT_RUN_BEGIN);
- var options = {};
- runReporter(fakeThis, runner, options);
+ runner = createMockRunner('start', 'start');
+ runReporter(reporterStub, runner, options);
- expect(fakeThis.draw.called, 'to be true');
+ expect(reporterStub.draw, 'was called');
});
});
-
- describe("on 'pending' event", function() {
+ describe('on pending', function() {
it('should call draw', function() {
- var fakeThis = {
- draw: sinon.stub().callsFake(noop),
- generateColors: noop
+ var reporterStub = {
+ draw: function() {},
+ generateColors: function() {}
};
- var runner = createMockRunner('pending', EVENT_TEST_PENDING);
- var options = {};
- runReporter(fakeThis, runner, options);
+ sandbox.stub(reporterStub, 'draw');
- expect(fakeThis.draw.called, 'to be true');
+ runner = createMockRunner('pending', 'pending');
+ runReporter(reporterStub, runner, options);
+
+ expect(reporterStub.draw, 'was called');
});
});
-
- describe("on 'pass' event", function() {
+ describe('on pass', function() {
it('should call draw', function() {
+ var reporterStub = {
+ draw: function() {},
+ generateColors: function() {}
+ };
+ sandbox.stub(reporterStub, 'draw');
+
var test = {
duration: '',
- slow: noop
+ slow: function() {}
};
- var fakeThis = {
- draw: sinon.stub().callsFake(noop),
- generateColors: noop
- };
- var runner = createMockRunner(
- 'pass',
- EVENT_TEST_PASS,
- null,
- null,
- test
- );
- var options = {};
- runReporter(fakeThis, runner, options);
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ runReporter(reporterStub, runner, options);
- expect(fakeThis.draw.called, 'to be true');
+ expect(reporterStub.draw, 'was called');
});
});
-
- describe("on 'fail' event", function() {
+ describe('on fail', function() {
it('should call draw', function() {
+ var reporterStub = {
+ draw: function() {},
+ generateColors: function() {}
+ };
+ sandbox.stub(reporterStub, 'draw');
+
var test = {
err: ''
};
- var fakeThis = {
- draw: sinon.stub().callsFake(noop),
- generateColors: noop
- };
- var runner = createMockRunner(
- 'fail',
- EVENT_TEST_FAIL,
- null,
- null,
- test
- );
- var options = {};
- runReporter(fakeThis, runner, options);
+ runner = createMockRunner('fail', 'fail', null, null, test);
+ runReporter(reporterStub, runner, options);
- expect(fakeThis.draw.called, 'to be true');
+ expect(reporterStub.draw, 'was called');
});
});
-
- describe("on 'end' event", function() {
+ describe('on end', function() {
it('should call epilogue', function() {
- var fakeThis = {
- draw: noop,
- epilogue: sinon.stub().callsFake(noop),
- generateColors: noop
+ var reporterStub = {
+ draw: function() {},
+ generateColors: function() {},
+ epilogue: function() {}
};
- var runner = createMockRunner('end', EVENT_RUN_END);
- var options = {};
- runReporter(fakeThis, runner, options);
+ sandbox.stub(reporterStub, 'epilogue');
- expect(fakeThis.epilogue.called, 'to be true');
- });
+ runner = createMockRunner('end', 'end');
+ runReporter(reporterStub, runner, options);
- it('should write numberOfLines amount of newlines', function() {
+ expect(reporterStub.epilogue, 'was called');
+ });
+ it('should write numberOfLines amount of new lines', function() {
var expectedNumberOfLines = 4;
- var fakeThis = {
- draw: noop,
- epilogue: noop,
- generateColors: noop
- };
- var runner = createMockRunner('end', EVENT_RUN_END);
- var options = {};
- var stdout = runReporter(fakeThis, runner, options);
+ runner = createMockRunner('end', 'end');
+ var stdout = runReporter(
+ {
+ draw: function() {},
+ generateColors: function() {},
+ epilogue: function() {}
+ },
+ runner,
+ options
+ );
- var isBlankLine = function(value) {
+ var arrayOfNewlines = stdout.filter(function(value) {
return value === '\n';
- };
+ });
- expect(
- stdout.filter(isBlankLine),
- 'to have length',
- expectedNumberOfLines
- );
+ expect(arrayOfNewlines, 'to have length', expectedNumberOfLines);
});
-
it('should call Base show', function() {
- var showCursorStub = sandbox.stub(Base.cursor, 'show');
- var fakeThis = {
- draw: noop,
- epilogue: noop,
- generateColors: noop
- };
- var runner = createMockRunner('end', EVENT_RUN_END);
- var options = {};
- runReporter(fakeThis, runner, options);
- sandbox.restore();
+ sandbox.stub(Base.cursor, 'show');
+
+ runner = createMockRunner('end', 'end');
+ runReporter(
+ {
+ draw: function() {},
+ generateColors: function() {},
+ epilogue: function() {}
+ },
+ runner,
+ options
+ );
- expect(showCursorStub.called, 'to be true');
+ expect(Base.cursor.show, 'was called');
});
});
});
- describe('#draw', function() {
- var stdoutWriteStub;
+ describe('draw', function() {
var stdout;
+ var stdoutWrite;
beforeEach(function() {
- stdoutWriteStub = sandbox.stub(process.stdout, 'write');
- stdoutWriteStub.callsFake(function(chunk, encoding, cb) {
- stdout.push(chunk);
- });
stdout = [];
+ stdoutWrite = process.stdout.write;
+ process.stdout.write = function(string, enc, callback) {
+ stdout.push(string);
+ };
});
- describe("when 'tick' is false", function() {
+ afterEach(function() {
+ process.stdout.write = stdoutWrite;
+ });
+
+ describe('if tick is false', function() {
it('should draw face with expected spaces, _ and ^', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
nyanCat.stats = {passes: 2, pending: 1, failures: 0};
- var fakeThis = {
+
+ nyanCat.draw.call({
tick: false,
- appendRainbow: noop,
- rainbowify: noop,
- drawScoreboard: noop,
- drawRainbow: noop,
+ appendRainbow: function() {},
+ rainbowify: function() {},
+ drawScoreboard: function() {},
+ drawRainbow: function() {},
drawNyanCat: NyanCat.prototype.drawNyanCat,
scoreboardWidth: 0,
trajectories: [[]],
- face: noop,
- cursorUp: noop
- };
-
- try {
- try {
- nyanCat.draw.call(fakeThis);
- } finally {
- sandbox.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
+ face: function() {},
+ cursorUp: function() {}
+ });
var expectedArray = [
'\u001b[0C',
@@ -218,35 +185,23 @@ describe('Nyan reporter', function() {
expect(stdout, 'to equal', expectedArray);
});
});
-
- describe("when 'tick' is true", function() {
+ describe('if tick is true', function() {
it('should draw face with expected spaces, _ and ~', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
nyanCat.stats = {passes: 2, pending: 1, failures: 0};
- var fakeThis = {
+
+ nyanCat.draw.call({
tick: true,
- appendRainbow: noop,
- rainbowify: noop,
- drawScoreboard: noop,
- drawRainbow: noop,
+ appendRainbow: function() {},
+ rainbowify: function() {},
+ drawScoreboard: function() {},
+ drawRainbow: function() {},
drawNyanCat: NyanCat.prototype.drawNyanCat,
scoreboardWidth: 0,
trajectories: [[]],
- face: noop,
- cursorUp: noop
- };
-
- try {
- try {
- nyanCat.draw.call(fakeThis);
- } finally {
- sandbox.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
+ face: function() {},
+ cursorUp: function() {}
+ });
var expectedArray = [
'\u001b[0C',
@@ -267,136 +222,102 @@ describe('Nyan reporter', function() {
});
});
- describe('#cursorDown', function() {
- var stdoutWriteStub;
+ describe('cursorDown', function() {
var stdout;
+ var stdoutWrite;
beforeEach(function() {
- stdoutWriteStub = sandbox.stub(process.stdout, 'write');
- stdoutWriteStub.callsFake(function(chunk, encoding, cb) {
- stdout.push(chunk);
- });
stdout = [];
+ stdoutWrite = process.stdout.write;
+ process.stdout.write = function(string) {
+ stdout.push(string);
+ };
+ });
+
+ afterEach(function() {
+ process.stdout.write = stdoutWrite;
});
it('should write cursor down interaction with expected number', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
var expectedNumber = 25;
- try {
- try {
- nyanCat.cursorDown(expectedNumber);
- } finally {
- sandbox.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
-
+ nyanCat.cursorDown(expectedNumber);
var expectedArray = ['\u001b[' + expectedNumber + 'B'];
expect(stdout, 'to equal', expectedArray);
});
});
- describe('#cursorUp', function() {
- var stdoutWriteStub;
+ describe('cursorUp', function() {
var stdout;
+ var stdoutWrite;
beforeEach(function() {
- stdoutWriteStub = sandbox.stub(process.stdout, 'write');
- stdoutWriteStub.callsFake(function(chunk, encoding, cb) {
- stdout.push(chunk);
- });
stdout = [];
+ stdoutWrite = process.stdout.write;
+ process.stdout.write = function(string, enc, callback) {
+ stdout.push(string);
+ };
+ });
+
+ afterEach(function() {
+ process.stdout.write = stdoutWrite;
});
it('should write cursor up interaction with expected number', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
var expectedNumber = 25;
- try {
- try {
- nyanCat.cursorUp(expectedNumber);
- } finally {
- sandbox.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
-
+ nyanCat.cursorUp(expectedNumber);
var expectedArray = ['\u001b[' + expectedNumber + 'A'];
expect(stdout, 'to equal', expectedArray);
});
});
- describe('#rainbowify', function() {
- var useColorsStub;
-
- beforeEach(function() {
- useColorsStub = sandbox.stub(Base, 'useColors');
- });
-
- afterEach(function() {
- sandbox.restore();
- });
-
- describe("when 'useColors' is false", function() {
+ describe('rainbowify', function() {
+ describe('useColors is false', function() {
beforeEach(function() {
- useColorsStub.value(false);
+ sandbox.stub(Base, 'useColors').value(false);
});
it('should return argument string', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
-
- var inputString = 'hello';
- var outputString = nyanCat.rainbowify(inputString);
- sandbox.restore();
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
+ var expectedString = 'hello';
+ var outputString = nyanCat.rainbowify(expectedString);
- var expectedString = inputString;
expect(outputString, 'to be', expectedString);
});
});
-
- describe("when 'useColors' is true", function() {
+ describe('useColors is true', function() {
beforeEach(function() {
- useColorsStub.value(true);
+ sandbox.stub(Base, 'useColors').value(true);
});
it('should return rainbowified string from the given string and predefined codes', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
-
- var inputString = 'hello';
- var colorCode = 'somecode';
- var fakeThis = {
- rainbowColors: [colorCode],
- colorIndex: 0
- };
- var outputString = nyanCat.rainbowify.call(fakeThis, inputString);
- sandbox.restore();
-
var startCode = '\u001b[38;5;';
var endCode = '\u001b[0m';
- var expectedString =
- startCode + colorCode + 'm' + inputString + endCode;
- expect(outputString, 'to be', expectedString);
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
+ var expectedString = 'hello';
+ var colorCode = 'somecode';
+ var expectedRainbowifyString =
+ startCode + colorCode + 'm' + expectedString + endCode;
+ var outputString = nyanCat.rainbowify.call(
+ {
+ rainbowColors: [colorCode],
+ colorIndex: 0
+ },
+ expectedString
+ );
+
+ expect(outputString, 'to be', expectedRainbowifyString);
});
});
});
- describe('#appendRainbow', function() {
- describe("when 'tick' is true", function() {
- it('should set an underscore segment', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ describe('appendRainbow', function() {
+ describe('if tick is true', function() {
+ it('should set an _ segment', function() {
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
var expectedSegment;
var inputArray = [];
var trajectories = [inputArray, inputArray, inputArray, inputArray];
@@ -412,11 +333,8 @@ describe('Nyan reporter', function() {
expect(expectedSegment, 'to be', '_');
});
-
- it('should shift each trajectory item if its length is greater than or equal to its max width', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ it('should shift each trajectory item, if its length is greater of equal to its max width', function() {
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
var rainbowifyResult = 'rainbowify';
var inputArray = ['itemToShify'];
@@ -441,12 +359,9 @@ describe('Nyan reporter', function() {
expect(trajectories, 'to equal', expectedTrajectories);
});
});
-
- describe("when 'tick' is false", function() {
- it('should set a dash segment', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ describe('if tick is false', function() {
+ it('should set an - segment', function() {
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
var expectedSegment;
var inputArray = [];
var trajectories = [inputArray, inputArray, inputArray, inputArray];
@@ -465,45 +380,42 @@ describe('Nyan reporter', function() {
});
});
- describe('#drawScoreboard', function() {
+ describe('drawScoreboard', function() {
+ var stdoutWrite;
var stdout;
+ var cachedColor;
+ var showOutput = false;
beforeEach(function() {
- sandbox.stub(Base, 'color').callsFake(function(type, n) {
- return type + n;
- });
- var stdoutWriteStub = sandbox.stub(process.stdout, 'write');
- stdoutWriteStub.callsFake(function(chunk, encoding, cb) {
- stdout.push(chunk);
- });
stdout = [];
+ stdoutWrite = process.stdout.write;
+ process.stdout.write = function(string, enc, callback) {
+ stdout.push(string);
+ if (showOutput) {
+ stdoutWrite.call(process.stdout, string, enc, callback);
+ }
+ };
+ cachedColor = Base.color;
+ Base.color = function(type, n) {
+ return type + n;
+ };
});
- it('should write scoreboard with color set with each stat', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ afterEach(function() {
+ process.stdout.write = stdoutWrite;
+ Base.color = cachedColor;
+ });
+ it('should write scoreboard with color set with each stat', function() {
var passes = 2;
var pending = 1;
var failures = 1;
-
- var fakeThis = {
- cursorUp: noop,
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
+ nyanCat.drawScoreboard.call({
+ cursorUp: function() {},
stats: {passes: passes, pending: pending, failures: failures},
numberOfLines: 4
- };
-
- try {
- try {
- nyanCat.drawScoreboard.call(fakeThis);
- } finally {
- sandbox.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
-
+ });
var expectedArray = [
' ',
'green' + passes,
@@ -520,40 +432,40 @@ describe('Nyan reporter', function() {
});
it('should call cursorUp with given numberOfLines', function() {
+ var expectedCursorArgument = null;
var expectedNumberOfLines = 1000;
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
- var fakeThis = {
- cursorUp: sinon.spy(),
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
+ nyanCat.drawScoreboard.call({
+ cursorUp: function(lines) {
+ expectedCursorArgument = lines;
+ },
stats: {passes: 0, pending: 0, failures: 0},
numberOfLines: expectedNumberOfLines
- };
-
- try {
- try {
- nyanCat.drawScoreboard.call(fakeThis);
- } finally {
- sandbox.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
+ });
- expect(fakeThis.cursorUp.calledWith(expectedNumberOfLines), 'to be true');
+ expect(expectedCursorArgument, 'to be', expectedNumberOfLines);
});
});
- describe('#drawRainbow', function() {
+ describe('drawRainbow', function() {
+ var stdoutWrite;
var stdout;
+ var showOutput = false;
beforeEach(function() {
- var stdoutWriteStub = sandbox.stub(process.stdout, 'write');
- stdoutWriteStub.callsFake(function(chunk, encoding, cb) {
- stdout.push(chunk);
- });
stdout = [];
+ stdoutWrite = process.stdout.write;
+ process.stdout.write = function(string, enc, callback) {
+ stdout.push(string);
+ if (showOutput) {
+ stdoutWrite.call(process.stdout, string, enc, callback);
+ }
+ };
+ });
+
+ afterEach(function() {
+ process.stdout.write = stdoutWrite;
});
it('should write width, contents and newline for each trajectory', function() {
@@ -562,25 +474,13 @@ describe('Nyan reporter', function() {
var expectedContents = 'input';
var inputArray = [expectedContents];
var trajectories = [inputArray];
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
- var fakeThis = {
- cursorUp: noop,
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
+ nyanCat.drawRainbow.call({
+ cursorUp: function() {},
trajectories: trajectories,
scoreboardWidth: expectedWidth,
numberOfLines: 1
- };
-
- try {
- try {
- nyanCat.drawRainbow.call(fakeThis);
- } finally {
- sandbox.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
+ });
var expectedArray = [
'\u001b[' + expectedWidth + 'C',
@@ -594,66 +494,41 @@ describe('Nyan reporter', function() {
var expectedCursorArgument = null;
var expectedNumberOfLines = 1000;
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
- var fakeThis = {
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
+ nyanCat.drawRainbow.call({
cursorUp: function(lines) {
expectedCursorArgument = lines;
},
trajectories: [['input']],
scoreboardWidth: 1,
numberOfLines: expectedNumberOfLines
- };
-
- try {
- try {
- nyanCat.drawRainbow.call(fakeThis);
- } finally {
- sandbox.restore();
- }
- } catch (err) {
- throw err; // Rethrow
- }
+ });
expect(expectedCursorArgument, 'to be', expectedNumberOfLines);
});
});
-
- describe('#face', function() {
- it('should expect "( x .x)" if any failures', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ describe('face', function() {
+ it('expected face:(x .x) when "failures" at least one', function() {
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
nyanCat.stats = {passes: 2, pending: 1, failures: 1};
-
expect(nyanCat.face(), 'to be', '( x .x)');
});
- it('should expect "( o .o)" if any pending but none failing', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ it('expected face:(x .x) when "pending" at least one and no failing', function() {
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
nyanCat.stats = {passes: 2, pending: 1, failures: 0};
-
expect(nyanCat.face(), 'to be', '( o .o)');
});
- it('should expect "( ^ .^)" if all passing', function() {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ it('expected face:(^ .^) when "passing" only', function() {
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
nyanCat.stats = {passes: 1, pending: 0, failures: 0};
-
expect(nyanCat.face(), 'to be', '( ^ .^)');
});
- it('should expect "( - .-)" otherwise', function(done) {
- var runner = {on: noop, once: noop};
- var options = {};
- var nyanCat = new NyanCat(runner, options);
+ it('expected face:(- .-) when otherwise', function(done) {
+ var nyanCat = new NyanCat({on: function() {}, once: function() {}});
nyanCat.stats = {passes: 0, pending: 0, failures: 0};
-
expect(nyanCat.face(), 'to be', '( - .-)');
done();
});
diff --git a/test/reporters/progress.spec.js b/test/reporters/progress.spec.js
index 0d45abeaf7..cdea9c643e 100644
--- a/test/reporters/progress.spec.js
+++ b/test/reporters/progress.spec.js
@@ -1,117 +1,107 @@
'use strict';
-var sinon = require('sinon');
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
+var sandbox = require('sinon').createSandbox();
var reporters = require('../../').reporters;
-
-var Base = reporters.Base;
var Progress = reporters.Progress;
-var createMockRunner = helpers.createMockRunner;
-var makeRunReporter = helpers.createRunReporterFunction;
+var Base = reporters.Base;
-var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN;
-var EVENT_RUN_END = events.EVENT_RUN_END;
-var EVENT_TEST_END = events.EVENT_TEST_END;
+var createMockRunner = require('./helpers').createMockRunner;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('Progress reporter', function() {
- var sandbox;
+ var stdout;
+ var stdoutWrite;
+ var runner;
var runReporter = makeRunReporter(Progress);
- var noop = function() {};
beforeEach(function() {
- sandbox = sinon.createSandbox();
+ stdout = [];
+ stdoutWrite = process.stdout.write;
+ process.stdout.write = function(string, enc, callback) {
+ stdout.push(string);
+ stdoutWrite.call(process.stdout, string, enc, callback);
+ };
});
afterEach(function() {
sandbox.restore();
+ process.stdout.write = stdoutWrite;
});
- describe('event handlers', function() {
- describe("on 'start' event", function() {
- it('should call cursor hide', function() {
- var hideCursorStub = sandbox.stub(Base.cursor, 'hide');
+ describe('on start', function() {
+ it('should call cursor hide', function() {
+ sandbox.stub(Base.cursor, 'hide');
- var runner = createMockRunner('start', EVENT_RUN_BEGIN);
- var options = {};
- runReporter({}, runner, options);
- sandbox.restore();
+ runner = createMockRunner('start', 'start');
+ runReporter({}, runner, {});
- expect(hideCursorStub.called, 'to be true');
- });
+ expect(Base.cursor.hide, 'was called');
});
+ });
- describe("on 'test end' event", function() {
- describe('when line has changed', function() {
- it('should write expected progress of open and close options', function() {
- var crCursorStub = sandbox.stub(Base.cursor, 'CR').callsFake(noop);
- sandbox.stub(Base, 'useColors').value(false);
- sandbox.stub(Base.window, 'width').value(5);
-
- var expectedTotal = 12;
- var expectedOpen = 'OpEn';
- var expectedClose = 'cLoSe';
- var expectedIncomplete = 'iNcOmPlEtE';
- var expectedOptions = {
- open: expectedOpen,
- complete: 'cOmPlEtE',
- incomplete: expectedIncomplete,
- close: expectedClose
- };
-
- var runner = createMockRunner('test end', EVENT_TEST_END);
- runner.total = expectedTotal;
- var options = {
- reporterOptions: expectedOptions
- };
- var stdout = runReporter({}, runner, options);
- sandbox.restore();
-
- var expectedArray = [
- '\u001b[J',
- ' ' + expectedOpen,
- '',
- expectedIncomplete,
- expectedClose
- ];
-
- expect(crCursorStub.called, 'to be true');
- expect(stdout, 'to equal', expectedArray);
- });
- });
+ describe('on test end', function() {
+ describe('if line has not changed', function() {
+ it('should return and not write anything', function() {
+ sandbox.stub(Base, 'useColors').value(false);
+ sandbox.stub(Base.cursor, 'CR');
+ sandbox.stub(Base.window, 'width').value(-3);
- describe('when line has not changed', function() {
- it('should not write anything', function() {
- sandbox.stub(Base, 'useColors').value(false);
- sandbox.stub(Base.cursor, 'CR').callsFake(noop);
- sandbox.stub(Base.window, 'width').value(-3);
-
- var expectedTotal = 1;
- var runner = createMockRunner('test end', EVENT_TEST_END);
- runner.total = expectedTotal;
- var options = {};
- var stdout = runReporter({}, runner, options);
- sandbox.restore();
-
- expect(stdout, 'to equal', []);
- });
+ var expectedTotal = 1;
+ var expectedOptions = {};
+ runner = createMockRunner('test end', 'test end');
+ runner.total = expectedTotal;
+ var stdout = runReporter({}, runner, expectedOptions);
+
+ expect(stdout, 'to equal', []);
});
});
-
- describe("on 'end' event", function() {
- it('should call cursor show and epilogue', function() {
- var showCursorStub = sandbox.stub(Base.cursor, 'show');
- var fakeThis = {
- epilogue: sinon.spy()
+ describe('if line has changed', function() {
+ it('should write expected progress of open and close options', function() {
+ sandbox.stub(Base, 'useColors').value(false);
+ sandbox.stub(Base.cursor, 'CR');
+ sandbox.stub(Base.window, 'width').value(5);
+
+ var expectedTotal = 12;
+ var expectedOpen = 'OpEn';
+ var expectedClose = 'cLoSe';
+ var expectedIncomplete = 'iNcOmPlEtE';
+ var expectedOptions = {
+ open: expectedOpen,
+ complete: 'cOmPlEtE',
+ incomplete: expectedIncomplete,
+ close: expectedClose
};
- var runner = createMockRunner('end', EVENT_RUN_END);
- var options = {};
- runReporter(fakeThis, runner, options);
- sandbox.restore();
-
- expect(fakeThis.epilogue.calledOnce, 'to be true');
- expect(showCursorStub.called, 'to be true');
+ var options = {
+ reporterOptions: expectedOptions
+ };
+ runner = createMockRunner('test end', 'test end');
+ runner.total = expectedTotal;
+ var stdout = runReporter({}, runner, options);
+
+ var expectedArray = [
+ '\u001b[J',
+ ' ' + expectedOpen,
+ '',
+ expectedIncomplete,
+ expectedClose
+ ];
+ expect(Base.cursor.CR, 'was called');
+ expect(stdout, 'to equal', expectedArray);
});
});
});
+
+ describe('on end', function() {
+ it('should call cursor show and epilogue', function() {
+ var reporterStub = {epilogue: function() {}};
+ sandbox.stub(Base.cursor, 'show');
+ sandbox.stub(reporterStub, 'epilogue');
+
+ runner = createMockRunner('end', 'end');
+ runReporter(reporterStub, runner, {});
+
+ expect(reporterStub.epilogue, 'was called');
+ expect(Base.cursor.show, 'was called');
+ });
+ });
});
diff --git a/test/reporters/spec.spec.js b/test/reporters/spec.spec.js
index 608bc7f512..5f7584e33e 100644
--- a/test/reporters/spec.spec.js
+++ b/test/reporters/spec.spec.js
@@ -1,163 +1,104 @@
'use strict';
-var sinon = require('sinon');
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
var reporters = require('../../').reporters;
-
-var Base = reporters.Base;
var Spec = reporters.Spec;
-var createMockRunner = helpers.createMockRunner;
-var makeRunReporter = helpers.createRunReporterFunction;
+var Base = reporters.Base;
-var EVENT_SUITE_BEGIN = events.EVENT_SUITE_BEGIN;
-var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL;
-var EVENT_TEST_PASS = events.EVENT_TEST_PASS;
-var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING;
+var createMockRunner = require('./helpers').createMockRunner;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('Spec reporter', function() {
+ var runner;
+ var options = {};
var runReporter = makeRunReporter(Spec);
+ var useColors;
var expectedTitle = 'expectedTitle';
- var noop = function() {};
- var sandbox;
beforeEach(function() {
- sandbox = sinon.createSandbox();
- sandbox.stub(Base, 'useColors').value(false);
+ useColors = Base.useColors;
+ Base.useColors = false;
});
afterEach(function() {
- sandbox.restore();
+ Base.useColors = useColors;
+ runner = undefined;
});
- describe('event handlers', function() {
- describe("on 'suite' event", function() {
- it('should return title', function() {
- var suite = {
- title: expectedTitle
- };
- var runner = createMockRunner(
- 'suite',
- EVENT_SUITE_BEGIN,
- null,
- null,
- suite
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- var expectedArray = [expectedTitle + '\n'];
- expect(stdout, 'to equal', expectedArray);
- });
+ describe('on suite', function() {
+ it('should return title', function() {
+ var suite = {
+ title: expectedTitle
+ };
+ runner = createMockRunner('suite', 'suite', null, null, suite);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ var expectedArray = [expectedTitle + '\n'];
+ expect(stdout, 'to equal', expectedArray);
});
-
- describe("on 'pending' event", function() {
- it('should return title', function() {
- var suite = {
- title: expectedTitle
- };
- var runner = createMockRunner(
- 'pending test',
- EVENT_TEST_PENDING,
- null,
- null,
- suite
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- var expectedArray = [' - ' + expectedTitle + '\n'];
- expect(stdout, 'to equal', expectedArray);
- });
+ });
+ describe('on pending', function() {
+ it('should return title', function() {
+ var suite = {
+ title: expectedTitle
+ };
+ runner = createMockRunner('pending test', 'pending', null, null, suite);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ var expectedArray = [' - ' + expectedTitle + '\n'];
+ expect(stdout, 'to equal', expectedArray);
});
-
- describe("on 'pass' event", function() {
- describe('when test speed is slow', function() {
- it('should return expected tick, title, and duration', function() {
- var expectedDuration = 2;
- var test = {
- title: expectedTitle,
- duration: expectedDuration,
- slow: function() {
- return 1;
- }
- };
- var runner = createMockRunner(
- 'pass',
- EVENT_TEST_PASS,
- null,
- null,
- test
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- var expectedString =
- ' ' +
- Base.symbols.ok +
- ' ' +
- expectedTitle +
- ' (' +
- expectedDuration +
- 'ms)' +
- '\n';
- expect(stdout[0], 'to be', expectedString);
- });
- });
-
- describe('when test speed is fast', function() {
- it('should return expected tick, title without a duration', function() {
- var expectedDuration = 1;
- var test = {
- title: expectedTitle,
- duration: expectedDuration,
- slow: function() {
- return 2;
- }
- };
- var runner = createMockRunner(
- 'pass',
- EVENT_TEST_PASS,
- null,
- null,
- test
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- var expectedString =
- ' ' + Base.symbols.ok + ' ' + expectedTitle + '\n';
- expect(stdout[0], 'to be', expectedString);
- });
+ });
+ describe('on pass', function() {
+ describe('if test speed is slow', function() {
+ it('should return expected tick, title and duration', function() {
+ var expectedDuration = 2;
+ var test = {
+ title: expectedTitle,
+ duration: expectedDuration,
+ slow: function() {
+ return 1;
+ }
+ };
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ var expectedString =
+ ' ' +
+ Base.symbols.ok +
+ ' ' +
+ expectedTitle +
+ ' (' +
+ expectedDuration +
+ 'ms)' +
+ '\n';
+ expect(stdout[0], 'to be', expectedString);
});
});
-
- describe("on 'fail' event", function() {
- it('should return title and function count', function() {
- var functionCount = 1;
+ describe('if test speed is fast', function() {
+ it('should return expected tick, title and without a duration', function() {
+ var expectedDuration = 1;
var test = {
- title: expectedTitle
+ title: expectedTitle,
+ duration: expectedDuration,
+ slow: function() {
+ return 2;
+ }
};
- var runner = createMockRunner(
- 'fail',
- EVENT_TEST_FAIL,
- null,
- null,
- test
- );
- var options = {};
- var stdout = runReporter({epilogue: noop}, runner, options);
- sandbox.restore();
-
- var expectedArray = [
- ' ' + functionCount + ') ' + expectedTitle + '\n'
- ];
- expect(stdout, 'to equal', expectedArray);
+ runner = createMockRunner('pass', 'pass', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ var expectedString =
+ ' ' + Base.symbols.ok + ' ' + expectedTitle + '\n';
+ expect(stdout[0], 'to be', expectedString);
});
});
});
+ describe('on fail', function() {
+ it('should return title and function count', function() {
+ var functionCount = 1;
+ var test = {
+ title: expectedTitle
+ };
+ runner = createMockRunner('fail', 'fail', null, null, test);
+ var stdout = runReporter({epilogue: function() {}}, runner, options);
+ var expectedArray = [' ' + functionCount + ') ' + expectedTitle + '\n'];
+ expect(stdout, 'to equal', expectedArray);
+ });
+ });
});
diff --git a/test/reporters/tap.spec.js b/test/reporters/tap.spec.js
index f3bfe8d473..c0a5419d37 100644
--- a/test/reporters/tap.spec.js
+++ b/test/reporters/tap.spec.js
@@ -1,295 +1,246 @@
'use strict';
-var events = require('../../').Runner.constants;
-var helpers = require('./helpers');
var reporters = require('../../').reporters;
-
var TAP = reporters.TAP;
-var createMockRunner = helpers.createMockRunner;
-var makeRunReporter = helpers.createRunReporterFunction;
-var EVENT_RUN_BEGIN = events.EVENT_RUN_BEGIN;
-var EVENT_RUN_END = events.EVENT_RUN_END;
-var EVENT_TEST_END = events.EVENT_TEST_END;
-var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL;
-var EVENT_TEST_PASS = events.EVENT_TEST_PASS;
-var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING;
+var createMockRunner = require('./helpers').createMockRunner;
+var makeRunReporter = require('./helpers.js').createRunReporterFunction;
describe('TAP reporter', function() {
+ var runner;
var runReporter = makeRunReporter(TAP);
var expectedTitle = 'some title';
var countAfterTestEnd = 2;
- var noop = function() {};
+ var test;
- function createTest() {
- return {
+ beforeEach(function() {
+ test = {
fullTitle: function() {
return expectedTitle;
},
- slow: noop
+ slow: function() {}
};
- }
+ });
- describe('TAP12 spec', function() {
- var options = {
- reporterOptions: {
- tapVersion: '12'
- }
- };
+ afterEach(function() {
+ runner = undefined;
+ test = undefined;
+ });
- describe('event handlers', function() {
- describe("on 'start' event", function() {
- var expectedSuite = 'some suite';
- var expectedTotal = 10;
- var expectedString;
- var stdout = [];
-
- before(function() {
- var runner = createMockRunner('start', EVENT_RUN_BEGIN);
- runner.suite = expectedSuite;
- runner.grepTotal = function(string) {
- expectedString = string;
- return expectedTotal;
- };
- stdout = runReporter({}, runner, options);
- });
+ describe('TAP12 spec', function() {
+ var options = {};
+
+ describe('on start', function() {
+ var expectedSuite = 'some suite';
+ var expectedTotal = 10;
+ var expectedString;
+ var stdout;
+
+ before(function() {
+ runner = createMockRunner('start', 'start');
+ runner.suite = expectedSuite;
+ runner.grepTotal = function(string) {
+ expectedString = string;
+ return expectedTotal;
+ };
+ stdout = runReporter({}, runner, options);
+ });
- it('should not write a TAP specification version', function() {
- expect(stdout, 'not to contain', 'TAP version');
- });
+ it('should not write the TAP specification version', function() {
+ expect(stdout, 'not to contain', 'TAP version');
+ });
+ it('should write the number of tests that it plans to run', function() {
+ var expectedArray = ['1..' + expectedTotal + '\n'];
+ expect(stdout, 'to equal', expectedArray);
+ expect(expectedString, 'to be', expectedSuite);
+ });
+ });
- it('should write the number of tests that it plans to run', function() {
- var expectedArray = ['1..' + expectedTotal + '\n'];
- expect(stdout, 'to equal', expectedArray);
- expect(expectedString, 'to be', expectedSuite);
- });
+ describe('on pending', function() {
+ it('should write expected message including count and title', function() {
+ runner = createMockRunner(
+ 'start test',
+ 'test end',
+ 'pending',
+ null,
+ test
+ );
+ runner.suite = '';
+ runner.grepTotal = function() {};
+
+ var stdout = runReporter({}, runner, options);
+
+ var expectedMessage =
+ 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n';
+ expect(stdout[0], 'to equal', expectedMessage);
});
+ });
+
+ describe('on pass', function() {
+ it('should write expected message including count and title', function() {
+ runner = createMockRunner('start test', 'test end', 'pass', null, test);
+ runner.suite = '';
+ runner.grepTotal = function() {};
- describe("on 'pending' event", function() {
- var stdout = [];
+ var stdout = runReporter({}, runner, options);
- before(function() {
- var test = createTest();
- var runner = createMockRunner(
- 'start test',
- EVENT_TEST_END,
- EVENT_TEST_PENDING,
+ var expectedMessage =
+ 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n';
+ expect(stdout[0], 'to equal', expectedMessage);
+ });
+ });
+
+ describe('on fail', function() {
+ describe('if there is an error message', function() {
+ it('should write expected message and error message', function() {
+ var expectedErrorMessage = 'some error';
+ var error = {
+ message: expectedErrorMessage
+ };
+ runner = createMockRunner(
+ 'test end fail',
+ 'test end',
+ 'fail',
null,
- test
+ test,
+ error
);
+ runner.on = function(event, callback) {
+ if (event === 'test end') {
+ callback();
+ } else if (event === 'fail') {
+ callback(test, error);
+ }
+ };
runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
+ runner.grepTotal = function() {};
- it('should write expected message including count and title', function() {
- var expectedMessage =
- 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n';
- expect(stdout[0], 'to equal', expectedMessage);
+ var stdout = runReporter({}, runner, options);
+
+ var expectedArray = [
+ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
+ ' ' + expectedErrorMessage + '\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
});
});
- describe("on 'pass' event", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var runner = createMockRunner(
- 'start test',
- EVENT_TEST_END,
- EVENT_TEST_PASS,
+ describe('if there is an error stack', function() {
+ it('should write expected message and stack', function() {
+ var expectedStack = 'some stack';
+ var error = {
+ stack: expectedStack
+ };
+ runner = createMockRunner(
+ 'test end fail',
+ 'test end',
+ 'fail',
null,
- test
+ test,
+ error
);
runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
+ runner.grepTotal = function() {};
- it('should write expected message including count and title', function() {
- var expectedMessage =
- 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n';
- expect(stdout[0], 'to equal', expectedMessage);
- });
- });
+ var stdout = runReporter({}, runner, options);
- describe("on 'fail' event", function() {
- var expectedErrorMessage = 'some error';
- var expectedStack = 'some stack';
-
- describe("when 'error' has only message", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var error = {
- message: expectedErrorMessage
- };
- var runner = createMockRunner(
- 'test end fail',
- EVENT_TEST_END,
- EVENT_TEST_FAIL,
- null,
- test,
- error
- );
- runner.on = function(event, callback) {
- if (event === EVENT_TEST_END) {
- callback();
- } else if (event === EVENT_TEST_FAIL) {
- callback(test, error);
- }
- };
- runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
-
- it('should write expected message and error message', function() {
- var expectedArray = [
- 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
- ' ' + expectedErrorMessage + '\n'
- ];
- expect(stdout, 'to equal', expectedArray);
- });
+ var expectedArray = [
+ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
+ ' ' + expectedStack + '\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
});
+ });
- describe("when 'error' has only stack", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var error = {
- stack: expectedStack
- };
- var runner = createMockRunner(
- 'test end fail',
- EVENT_TEST_END,
- EVENT_TEST_FAIL,
- null,
- test,
- error
- );
- runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
-
- it('should write expected message and stack', function() {
- var expectedArray = [
- 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
- ' ' + expectedStack + '\n'
- ];
- expect(stdout, 'to equal', expectedArray);
- });
- });
+ describe('if there is an error stack and error message', function() {
+ it('should write expected message and stack', function() {
+ var expectedStack = 'some stack';
+ var expectedErrorMessage = 'some error';
+ var error = {
+ stack: expectedStack,
+ message: expectedErrorMessage
+ };
+ runner = createMockRunner(
+ 'test end fail',
+ 'test end',
+ 'fail',
+ null,
+ test,
+ error
+ );
+ runner.on = function(event, callback) {
+ if (event === 'test end') {
+ callback();
+ } else if (event === 'fail') {
+ callback(test, error);
+ }
+ };
+ runner.suite = '';
+ runner.grepTotal = function() {};
- describe("when 'error' has both message and stack", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var error = {
- stack: expectedStack,
- message: expectedErrorMessage
- };
- var runner = createMockRunner(
- 'test end fail',
- EVENT_TEST_END,
- EVENT_TEST_FAIL,
- null,
- test,
- error
- );
- runner.on = function(event, callback) {
- if (event === EVENT_TEST_END) {
- callback();
- } else if (event === EVENT_TEST_FAIL) {
- callback(test, error);
- }
- };
- runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
-
- it('should write expected message, error message, and stack', function() {
- var expectedArray = [
- 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
- ' ' + expectedErrorMessage + '\n',
- ' ' + expectedStack + '\n'
- ];
- expect(stdout, 'to equal', expectedArray);
- });
- });
+ var stdout = runReporter({}, runner, options);
- describe("when 'error' has neither message nor stack", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var error = {};
- var runner = createMockRunner(
- 'test end fail',
- EVENT_TEST_END,
- EVENT_TEST_FAIL,
- null,
- test,
- error
- );
- runner.on = runner.once = function(event, callback) {
- if (event === EVENT_TEST_END) {
- callback();
- } else if (event === EVENT_TEST_FAIL) {
- callback(test, error);
- }
- };
- runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
-
- it('should write expected message only', function() {
- var expectedArray = [
- 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'
- ];
- expect(stdout, 'to equal', expectedArray);
- });
+ var expectedArray = [
+ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
+ ' ' + expectedErrorMessage + '\n',
+ ' ' + expectedStack + '\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
});
});
- describe("on 'end' event", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var runner = createMockRunner(
- 'fail end pass',
- EVENT_TEST_FAIL,
- EVENT_RUN_END,
- EVENT_TEST_PASS,
- test
+ describe('if there is no error stack or error message', function() {
+ it('should write expected message only', function() {
+ var error = {};
+ runner = createMockRunner(
+ 'test end fail',
+ 'test end',
+ 'fail',
+ null,
+ test,
+ error
);
+ runner.on = runner.once = function(event, callback) {
+ if (event === 'test end') {
+ callback();
+ } else if (event === 'fail') {
+ callback(test, error);
+ }
+ };
runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
+ runner.grepTotal = function() {};
+
+ var stdout = runReporter({}, runner, options);
- it('should write total tests, passes, and failures', function() {
- var numberOfPasses = 1;
- var numberOfFails = 1;
- var totalTests = numberOfPasses + numberOfFails;
var expectedArray = [
- 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n',
- 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n',
- '# tests ' + totalTests + '\n',
- '# pass ' + numberOfPasses + '\n',
- '# fail ' + numberOfFails + '\n'
+ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'
];
expect(stdout, 'to equal', expectedArray);
});
});
});
+
+ describe('on end', function() {
+ it('should write total tests, passes and failures', function() {
+ var numberOfPasses = 1;
+ var numberOfFails = 1;
+ runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test);
+ runner.suite = '';
+ runner.grepTotal = function() {};
+
+ var stdout = runReporter({}, runner, options);
+
+ var totalTests = numberOfPasses + numberOfFails;
+ var expectedArray = [
+ 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n',
+ 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n',
+ '# tests ' + totalTests + '\n',
+ '# pass ' + numberOfPasses + '\n',
+ '# fail ' + numberOfFails + '\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
+ });
+ });
});
describe('TAP13 spec', function() {
@@ -299,270 +250,229 @@ describe('TAP reporter', function() {
}
};
- describe('event handlers', function() {
- describe("on 'start' event", function() {
- var expectedSuite = 'some suite';
- var expectedTotal = 10;
- var expectedString;
- var stdout;
-
- before(function() {
- var runner = createMockRunner('start', EVENT_RUN_BEGIN);
- runner.suite = expectedSuite;
- runner.grepTotal = function(string) {
- expectedString = string;
- return expectedTotal;
- };
- stdout = runReporter({}, runner, options);
- });
+ describe('on start', function() {
+ var expectedSuite = 'some suite';
+ var expectedTotal = 10;
+ var expectedString;
+ var stdout;
+
+ before(function() {
+ runner = createMockRunner('start', 'start');
+ runner.suite = expectedSuite;
+ runner.grepTotal = function(string) {
+ expectedString = string;
+ return expectedTotal;
+ };
+
+ stdout = runReporter({}, runner, options);
+ });
- it('should write the TAP specification version', function() {
- var tapVersion = options.reporterOptions.tapVersion;
- var expectedFirstLine = 'TAP version ' + tapVersion + '\n';
- expect(stdout[0], 'to equal', expectedFirstLine);
- });
+ it('should write the TAP specification version', function() {
+ var tapVersion = options.reporterOptions.tapVersion;
+ var expectedFirstLine = 'TAP version ' + tapVersion + '\n';
+ expect(stdout[0], 'to equal', expectedFirstLine);
+ });
+ it('should write the number of tests that it plans to run', function() {
+ var expectedSecondLine = '1..' + expectedTotal + '\n';
+ expect(stdout[1], 'to equal', expectedSecondLine);
+ expect(expectedString, 'to be', expectedSuite);
+ });
+ });
- it('should write the number of tests that it plans to run', function() {
- var expectedSecondLine = '1..' + expectedTotal + '\n';
- expect(stdout[1], 'to equal', expectedSecondLine);
- expect(expectedString, 'to be', expectedSuite);
- });
+ describe('on pending', function() {
+ it('should write expected message including count and title', function() {
+ runner = createMockRunner(
+ 'start test',
+ 'test end',
+ 'pending',
+ null,
+ test
+ );
+ runner.suite = '';
+ runner.grepTotal = function() {};
+
+ var stdout = runReporter({}, runner, options);
+
+ var expectedMessage =
+ 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n';
+ expect(stdout[0], 'to equal', expectedMessage);
});
+ });
+
+ describe('on pass', function() {
+ it('should write expected message including count and title', function() {
+ runner = createMockRunner('start test', 'test end', 'pass', null, test);
+ runner.suite = '';
+ runner.grepTotal = function() {};
- describe("on 'pending' event", function() {
- var stdout;
+ var stdout = runReporter({}, runner, options);
- before(function() {
- var test = createTest();
- var runner = createMockRunner(
- 'start test',
- EVENT_TEST_END,
- EVENT_TEST_PENDING,
+ var expectedMessage =
+ 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n';
+ expect(stdout[0], 'to equal', expectedMessage);
+ });
+ });
+
+ describe('on fail', function() {
+ describe('if there is an error message', function() {
+ it('should write expected message and error message', function() {
+ var expectedErrorMessage = 'some error';
+ var error = {
+ message: expectedErrorMessage
+ };
+ runner = createMockRunner(
+ 'test end fail',
+ 'test end',
+ 'fail',
null,
- test
+ test,
+ error
);
+ runner.on = function(event, callback) {
+ if (event === 'test end') {
+ callback();
+ } else if (event === 'fail') {
+ callback(test, error);
+ }
+ };
runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
+ runner.grepTotal = function() {};
+
+ var stdout = runReporter({}, runner, options);
- it('should write expected message including count and title', function() {
- var expectedMessage =
- 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n';
- expect(stdout[0], 'to equal', expectedMessage);
+ var expectedArray = [
+ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
+ ' ---\n',
+ ' message: |-\n',
+ ' ' + expectedErrorMessage + '\n',
+ ' ...\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
});
});
- describe("on 'pass' event", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var runner = createMockRunner(
- 'start test',
- EVENT_TEST_END,
- EVENT_TEST_PASS,
+ describe('if there is an error stack', function() {
+ it('should write expected message and stack', function() {
+ var expectedStack = 'some stack';
+ var error = {
+ stack: expectedStack
+ };
+ runner = createMockRunner(
+ 'test end fail',
+ 'test end',
+ 'fail',
null,
- test
+ test,
+ error
);
runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
+ runner.grepTotal = function() {};
- it('should write expected message including count and title', function() {
- var expectedMessage =
- 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n';
- expect(stdout[0], 'to equal', expectedMessage);
- });
- });
+ var stdout = runReporter({}, runner, options);
- describe("on 'fail' event", function() {
- var expectedErrorMessage = 'some error';
- var expectedStack = 'some stack';
-
- describe("when 'error' has only message", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var error = {
- message: expectedErrorMessage
- };
- var runner = createMockRunner(
- 'test end fail',
- EVENT_TEST_END,
- EVENT_TEST_FAIL,
- null,
- test,
- error
- );
- runner.on = function(event, callback) {
- if (event === EVENT_TEST_END) {
- callback();
- } else if (event === EVENT_TEST_FAIL) {
- callback(test, error);
- }
- };
- runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
-
- it('should write expected message and error message', function() {
- var expectedArray = [
- 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
- ' ---\n',
- ' message: |-\n',
- ' ' + expectedErrorMessage + '\n',
- ' ...\n'
- ];
- expect(stdout, 'to equal', expectedArray);
- });
+ var expectedArray = [
+ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
+ ' ---\n',
+ ' stack: |-\n',
+ ' ' + expectedStack + '\n',
+ ' ...\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
});
+ });
- describe("when 'error' has only stack", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var error = {
- stack: expectedStack
- };
- var runner = createMockRunner(
- 'test end fail',
- EVENT_TEST_END,
- EVENT_TEST_FAIL,
- null,
- test,
- error
- );
- runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
-
- it('should write expected message and stack', function() {
- var expectedArray = [
- 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
- ' ---\n',
- ' stack: |-\n',
- ' ' + expectedStack + '\n',
- ' ...\n'
- ];
- expect(stdout, 'to equal', expectedArray);
- });
- });
+ describe('if there is an error stack and error message', function() {
+ it('should write expected message and stack', function() {
+ var expectedStack = 'some stack';
+ var expectedErrorMessage = 'some error';
+ var error = {
+ stack: expectedStack,
+ message: expectedErrorMessage
+ };
+ runner = createMockRunner(
+ 'test end fail',
+ 'test end',
+ 'fail',
+ null,
+ test,
+ error
+ );
+ runner.on = function(event, callback) {
+ if (event === 'test end') {
+ callback();
+ } else if (event === 'fail') {
+ callback(test, error);
+ }
+ };
+ runner.suite = '';
+ runner.grepTotal = function() {};
- describe("when 'error' has both message and stack", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var error = {
- stack: expectedStack,
- message: expectedErrorMessage
- };
- var runner = createMockRunner(
- 'test end fail',
- EVENT_TEST_END,
- EVENT_TEST_FAIL,
- null,
- test,
- error
- );
- runner.on = function(event, callback) {
- if (event === EVENT_TEST_END) {
- callback();
- } else if (event === EVENT_TEST_FAIL) {
- callback(test, error);
- }
- };
- runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
-
- it('should write expected message, error message, and stack', function() {
- var expectedArray = [
- 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
- ' ---\n',
- ' message: |-\n',
- ' ' + expectedErrorMessage + '\n',
- ' stack: |-\n',
- ' ' + expectedStack + '\n',
- ' ...\n'
- ];
- expect(stdout, 'to equal', expectedArray);
- });
- });
+ var stdout = runReporter({}, runner, options);
- describe("when 'error' has neither message nor stack", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var error = {};
- var runner = createMockRunner(
- 'test end fail',
- EVENT_TEST_END,
- EVENT_TEST_FAIL,
- null,
- test,
- error
- );
- runner.on = runner.once = function(event, callback) {
- if (event === EVENT_TEST_END) {
- callback();
- } else if (event === EVENT_TEST_FAIL) {
- callback(test, error);
- }
- };
- runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
-
- it('should write expected message only', function() {
- var expectedArray = [
- 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'
- ];
- expect(stdout, 'to equal', expectedArray);
- });
+ var expectedArray = [
+ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n',
+ ' ---\n',
+ ' message: |-\n',
+ ' ' + expectedErrorMessage + '\n',
+ ' stack: |-\n',
+ ' ' + expectedStack + '\n',
+ ' ...\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
});
});
- describe("on 'end' event", function() {
- var stdout;
-
- before(function() {
- var test = createTest();
- var runner = createMockRunner(
- 'fail end pass',
- EVENT_TEST_FAIL,
- EVENT_RUN_END,
- EVENT_TEST_PASS,
- test
+ describe('if there is no error stack or error message', function() {
+ it('should write expected message only', function() {
+ var error = {};
+ runner = createMockRunner(
+ 'test end fail',
+ 'test end',
+ 'fail',
+ null,
+ test,
+ error
);
+ runner.on = runner.once = function(event, callback) {
+ if (event === 'test end') {
+ callback();
+ } else if (event === 'fail') {
+ callback(test, error);
+ }
+ };
runner.suite = '';
- runner.grepTotal = noop;
- stdout = runReporter({}, runner, options);
- });
+ runner.grepTotal = function() {};
+
+ var stdout = runReporter({}, runner, options);
- it('should write total tests, passes, and failures', function() {
- var numberOfPasses = 1;
- var numberOfFails = 1;
- var totalTests = numberOfPasses + numberOfFails;
var expectedArray = [
- 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n',
- 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n',
- '# tests ' + totalTests + '\n',
- '# pass ' + numberOfPasses + '\n',
- '# fail ' + numberOfFails + '\n'
+ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'
];
expect(stdout, 'to equal', expectedArray);
});
});
});
+
+ describe('on end', function() {
+ it('should write total tests, passes and failures', function() {
+ var numberOfPasses = 1;
+ var numberOfFails = 1;
+ runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test);
+ runner.suite = '';
+ runner.grepTotal = function() {};
+
+ var stdout = runReporter({}, runner, options);
+
+ var totalTests = numberOfPasses + numberOfFails;
+ var expectedArray = [
+ 'ok ' + numberOfPasses + ' ' + expectedTitle + '\n',
+ 'not ok ' + numberOfFails + ' ' + expectedTitle + '\n',
+ '# tests ' + totalTests + '\n',
+ '# pass ' + numberOfPasses + '\n',
+ '# fail ' + numberOfFails + '\n'
+ ];
+ expect(stdout, 'to equal', expectedArray);
+ });
+ });
});
});
diff --git a/test/reporters/xunit.spec.js b/test/reporters/xunit.spec.js
index 26fce4a1c4..35555968a1 100644
--- a/test/reporters/xunit.spec.js
+++ b/test/reporters/xunit.spec.js
@@ -1,34 +1,25 @@
'use strict';
-var EventEmitter = require('events').EventEmitter;
var fs = require('fs');
-var os = require('os');
-var path = require('path');
var mkdirp = require('mkdirp');
-var rimraf = require('rimraf');
-var sinon = require('sinon');
+var path = require('path');
+var assert = require('assert');
var createStatsCollector = require('../../lib/stats-collector');
-var events = require('../../').Runner.constants;
+var EventEmitter = require('events').EventEmitter;
var reporters = require('../../').reporters;
-var states = require('../../').Runnable.constants;
-
-var Base = reporters.Base;
+var constants = require('../../lib/runnable').constants;
+var STATE_FAILED = constants.STATE_FAILED;
+var STATE_PASSED = constants.STATE_PASSED;
var XUnit = reporters.XUnit;
-var EVENT_RUN_END = events.EVENT_RUN_END;
-var EVENT_TEST_END = events.EVENT_TEST_END;
-var EVENT_TEST_FAIL = events.EVENT_TEST_FAIL;
-var EVENT_TEST_PASS = events.EVENT_TEST_PASS;
-var EVENT_TEST_PENDING = events.EVENT_TEST_PENDING;
-
-var STATE_FAILED = states.STATE_FAILED;
-var STATE_PASSED = states.STATE_PASSED;
-
describe('XUnit reporter', function() {
- var sandbox;
+ var stdout;
+ var stdoutWrite;
+ // the runner parameter of the reporter
var runner;
- var noop = function() {};
+ var callbackArgument = null;
+ var expectedFailure = 'some-failures';
var expectedLine = 'some-line';
var expectedClassName = 'fullTitle';
var expectedTitle = 'some title';
@@ -36,286 +27,192 @@ describe('XUnit reporter', function() {
var expectedDiff =
'\n + expected - actual\n\n -foo\n +bar\n ';
var expectedStack = 'some-stack';
+ var expectedWrite = null;
beforeEach(function() {
- runner = {on: noop, once: noop};
+ stdout = [];
+ runner = {on: function() {}, once: function() {}};
createStatsCollector(runner);
});
- describe("when 'reporterOptions.output' is provided", function() {
- var expectedOutput = path.join(path.sep, 'path', 'to', 'some-output');
+ describe('if reporter options output is given', function() {
+ var expectedOutput = 'some-output';
var options = {
reporterOptions: {
output: expectedOutput
}
};
-
- describe('when fileStream can be created', function() {
- var mkdirpSync;
- var fsCreateWriteStream;
-
- beforeEach(function() {
- sandbox = sinon.createSandbox();
- mkdirpSync = sandbox.stub(mkdirp, 'sync');
- fsCreateWriteStream = sandbox.stub(fs, 'createWriteStream');
+ describe('but it cant create a write stream', function() {
+ it('should throw expected error', function() {
+ var fsCreateWriteStream = fs.createWriteStream;
+ fs.createWriteStream = false;
+
+ var boundXUnit = XUnit.bind({}, runner, options);
+ expect(boundXUnit, 'to throw', 'file output not supported in browser');
+ fs.createWriteStream = fsCreateWriteStream;
});
+ });
+ describe('and it can create a write stream', function() {
+ it('should locate the output dir, create it, then assign as fileStream', function() {
+ var expectedDirectory;
+ var mkdirpSync = mkdirp.sync;
+ var pathDirname = path.dirname;
+ var fsCreateWriteStream = fs.createWriteStream;
+ mkdirp.sync = function(directory) {
+ expectedDirectory = directory;
+ };
+ path.dirname = function(location) {
+ return location;
+ };
+ fs.createWriteStream = function(streamDetails) {
+ return streamDetails;
+ };
- it('should open given file for writing, recursively creating directories in pathname', function() {
- var fakeThis = {
+ var contextVariables = {
fileStream: null
};
- XUnit.call(fakeThis, runner, options);
+ XUnit.call(contextVariables, runner, options);
- var expectedDirectory = path.dirname(expectedOutput);
- expect(mkdirpSync.calledWith(expectedDirectory), 'to be true');
- expect(fsCreateWriteStream.calledWith(expectedOutput), 'to be true');
- });
+ expect(expectedDirectory, 'to be', expectedOutput);
+ expect(contextVariables.fileStream, 'to be', expectedOutput);
- afterEach(function() {
- sandbox.restore();
+ fs.createWriteStream = fsCreateWriteStream;
+ mkdirp.sync = mkdirpSync;
+ path.dirname = pathDirname;
});
});
+ });
- describe('when fileStream cannot be created', function() {
- describe('when given an invalid pathname', function() {
- var tmpdir;
- var invalidPath;
-
- beforeEach(function createInvalidPath() {
- tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), 'mocha-test-'));
+ describe("on 'pending', 'pass' and 'fail' events", function() {
+ it("should add test to tests called on 'end' event", function() {
+ var pendingTest = {
+ name: 'pending',
+ slow: function() {}
+ };
+ var failTest = {
+ name: 'fail',
+ slow: function() {}
+ };
+ var passTest = {
+ name: 'pass',
+ slow: function() {}
+ };
+ runner.on = runner.once = function(event, callback) {
+ if (event === 'pending') {
+ callback(pendingTest);
+ }
+ if (event === 'pass') {
+ callback(passTest);
+ }
+ if (event === 'fail') {
+ callback(failTest);
+ }
+ if (event === 'end') {
+ callback();
+ }
+ };
- function touch(filename) {
- fs.closeSync(fs.openSync(filename, 'w'));
+ var calledTests = [];
+ XUnit.call(
+ {
+ write: function() {},
+ test: function(test) {
+ calledTests.push(test);
}
+ },
+ runner
+ );
- // Create path where file 'some-file' used as directory
- invalidPath = path.join(
- tmpdir,
- 'some-file',
- path.basename(expectedOutput)
- );
- touch(path.dirname(invalidPath));
- });
-
- it('should throw system error', function() {
- var options = {
- reporterOptions: {
- output: invalidPath
- }
- };
- var boundXUnit = XUnit.bind({}, runner, options);
- expect(
- boundXUnit,
- 'to throw',
- expect.it('to be an', Error).and('to satisfy', {
- syscall: 'mkdir',
- code: 'EEXIST',
- path: path.dirname(invalidPath)
- })
- );
- });
-
- afterEach(function() {
- rimraf.sync(tmpdir);
- });
- });
-
- describe('when run in browser', function() {
- beforeEach(function() {
- sandbox = sinon.createSandbox();
- sandbox.stub(fs, 'createWriteStream').value(false);
- });
-
- it('should throw unsupported error', function() {
- var boundXUnit = XUnit.bind({}, runner, options);
- expect(
- boundXUnit,
- 'to throw',
- 'file output not supported in browser'
- );
- });
-
- afterEach(function() {
- sandbox.restore();
- });
- });
+ var expectedCalledTests = [pendingTest, passTest, failTest];
+ expect(calledTests, 'to equal', expectedCalledTests);
});
});
- describe('event handlers', function() {
- describe("on 'pending', 'pass' and 'fail' events", function() {
- it("should add test to tests called on 'end' event", function() {
- var pendingTest = {
- name: 'pending',
- slow: noop
- };
- var failTest = {
- name: 'fail',
- slow: noop
- };
- var passTest = {
- name: 'pass',
- slow: noop
+ describe('done', function() {
+ describe('if fileStream is truthy', function() {
+ it('should run callback with failure inside streams end', function() {
+ var xunit = new XUnit({on: function() {}, once: function() {}});
+ var callback = function(failures) {
+ callbackArgument = failures;
};
- runner.on = runner.once = function(event, callback) {
- if (event === EVENT_TEST_PENDING) {
- callback(pendingTest);
- } else if (event === EVENT_TEST_PASS) {
- callback(passTest);
- } else if (event === EVENT_TEST_FAIL) {
- callback(failTest);
- } else if (event === EVENT_RUN_END) {
+ var calledEnd = false;
+ var fileStream = {
+ end: function(callback) {
+ calledEnd = true;
callback();
}
};
+ xunit.done.call({fileStream: fileStream}, expectedFailure, callback);
- var calledTests = [];
- var fakeThis = {
- write: noop,
- test: function(test) {
- calledTests.push(test);
- }
+ expect(calledEnd, 'to be', true);
+ expect(callbackArgument, 'to be', expectedFailure);
+ });
+ });
+ describe('if fileStream is falsy', function() {
+ it('should run callback with failure', function() {
+ var xunit = new XUnit({on: function() {}, once: function() {}});
+ var callback = function(failures) {
+ callbackArgument = failures;
};
- XUnit.call(fakeThis, runner);
+ xunit.done.call({fileStream: false}, expectedFailure, callback);
- var expectedCalledTests = [pendingTest, passTest, failTest];
- expect(calledTests, 'to equal', expectedCalledTests);
+ expect(callbackArgument, 'to be', expectedFailure);
});
});
});
- describe('#done', function() {
- var xunit;
- var options = {
- reporterOptions: {}
- };
- var expectedNFailures = 13;
- var callback;
-
- beforeEach(function() {
- sandbox = sinon.createSandbox();
- callback = sandbox.spy();
- });
-
- afterEach(function() {
- callback = null;
- xunit = null;
- sandbox.restore();
- });
-
- describe('when output directed to file', function() {
- var fakeThis;
-
- beforeEach(function() {
- xunit = new XUnit(runner, options);
-
- fakeThis = {
- fileStream: {
- end: sinon.stub().callsFake(function(chunk, encoding, cb) {
- if (typeof arguments[0] === 'function') {
- cb = arguments[0];
- }
- cb();
- }),
- write: function(chunk, encoding, cb) {}
+ describe('write', function() {
+ describe('if fileStream is truthy', function() {
+ it('should call fileStream write with line and new line', function() {
+ var xunit = new XUnit({on: function() {}, once: function() {}});
+ var fileStream = {
+ write: function(write) {
+ expectedWrite = write;
}
};
- });
-
- it("should run completion callback via 'fileStream.end'", function() {
- xunit.done.call(fakeThis, expectedNFailures, callback);
-
- expect(fakeThis.fileStream.end.calledOnce, 'to be true');
- expect(callback.calledOnce, 'to be true');
- expect(callback.calledWith(expectedNFailures), 'to be true');
- });
- });
-
- describe('when output directed to stdout (or console)', function() {
- var fakeThis;
+ xunit.write.call({fileStream: fileStream}, expectedLine);
- beforeEach(function() {
- xunit = new XUnit(runner, options);
- fakeThis = {};
- });
-
- it('should run completion callback', function() {
- xunit.done.call(fakeThis, expectedNFailures, callback);
-
- expect(callback.calledOnce, 'to be true');
- expect(callback.calledWith(expectedNFailures), 'to be true');
+ expect(expectedWrite, 'to be', expectedLine + '\n');
});
});
- });
-
- describe('#write', function() {
- // :TODO: Method should be named 'writeln', not 'write'
- describe('when output directed to file', function() {
- var fileStream = {
- write: sinon.spy()
- };
+ describe('if fileStream is falsy and stdout exists', function() {
+ it('should call write with line and new line', function() {
+ stdoutWrite = process.stdout.write;
+ process.stdout.write = function(string) {
+ stdout.push(string);
+ };
- it("should call 'fileStream.write' with line and newline", function() {
- var xunit = new XUnit(runner);
- var fakeThis = {fileStream: fileStream};
- xunit.write.call(fakeThis, expectedLine);
+ var xunit = new XUnit({on: function() {}, once: function() {}});
+ xunit.write.call({fileStream: false}, expectedLine);
- expect(fileStream.write.calledWith(expectedLine + '\n'), 'to be true');
- });
- });
+ process.stdout.write = stdoutWrite;
- describe('when output directed to stdout', function() {
- it("should call 'process.stdout.write' with line and newline", function() {
- var xunit = new XUnit(runner);
- var fakeThis = {fileStream: false};
- var stdoutWriteStub = sinon.stub(process.stdout, 'write');
- xunit.write.call(fakeThis, expectedLine);
- stdoutWriteStub.restore();
-
- expect(stdoutWriteStub.calledWith(expectedLine + '\n'), 'to be true');
+ expect(stdout[0], 'to be', expectedLine + '\n');
});
});
-
- describe('when output directed to console', function() {
- it("should call 'console.log' with line", function() {
- // :TODO: XUnit needs a trivially testable means to force console.log()
- var realProcess = process;
+ describe('if fileStream is falsy and stdout does not exist', function() {
+ it('should call write with line', function() {
+ stdoutWrite = process;
process = false; // eslint-disable-line no-native-reassign, no-global-assign
+ var cachedConsoleLog = console.log;
+ console.log = function(string) {
+ stdout.push(string);
+ };
- var xunit = new XUnit(runner);
- var fakeThis = {fileStream: false};
- var consoleLogStub = sinon.stub(console, 'log');
- xunit.write.call(fakeThis, expectedLine);
- consoleLogStub.restore();
-
- process = realProcess; // eslint-disable-line no-native-reassign, no-global-assign
+ var xunit = new XUnit({on: function() {}, once: function() {}});
+ xunit.write.call({fileStream: false}, expectedLine);
- expect(consoleLogStub.calledWith(expectedLine), 'to be true');
+ console.log = cachedConsoleLog;
+ process = stdoutWrite; // eslint-disable-line no-native-reassign, no-global-assign
+ expect(stdout[0], 'to be', expectedLine);
});
});
});
- describe('#test', function() {
- var expectedWrite;
- var fakeThis = {
- write: function(str) {
- expectedWrite = str;
- }
- };
-
- beforeEach(function() {
- sandbox = sinon.createSandbox();
- sandbox.stub(Base, 'useColors').value(false);
- });
-
- afterEach(function() {
- sandbox.restore();
- expectedWrite = null;
- });
-
+ describe('test', function() {
describe('on test failure', function() {
it('should write expected tag with error details', function() {
- var xunit = new XUnit(runner);
+ var xunit = new XUnit({on: function() {}, once: function() {}});
var expectedTest = {
state: STATE_FAILED,
title: expectedTitle,
@@ -332,9 +229,14 @@ describe('XUnit reporter', function() {
stack: expectedStack
}
};
-
- xunit.test.call(fakeThis, expectedTest);
- sandbox.restore();
+ xunit.test.call(
+ {
+ write: function(string) {
+ expectedWrite = string;
+ }
+ },
+ expectedTest
+ );
var expectedTag =
'';
+
expect(expectedWrite, 'to be', expectedTag);
});
});
-
describe('on test in any other state', function() {
it('should write expected tag', function() {
- var xunit = new XUnit(runner);
+ var xunit = new XUnit({on: function() {}, once: function() {}});
+
var expectedTest = {
isPending: function() {
return false;
@@ -396,9 +305,14 @@ describe('XUnit reporter', function() {
},
duration: false
};
-
- xunit.test.call(fakeThis, expectedTest);
- sandbox.restore();
+ xunit.test.call(
+ {
+ write: function(string) {
+ expectedWrite = string;
+ }
+ },
+ expectedTest
+ );
var expectedTag =
'';
+
expect(expectedWrite, 'to be', expectedTag);
});
});
-
it('should write expected summary statistics', function() {
- var numTests = 0;
- var numPass = 0;
- var numFail = 0;
+ var count = 0;
var simpleError = {
actual: 'foo',
expected: 'bar',
@@ -421,14 +333,8 @@ describe('XUnit reporter', function() {
stack: expectedStack
};
var generateTest = function(passed) {
- numTests++;
- if (passed) {
- numPass++;
- } else {
- numFail++;
- }
- return {
- title: [expectedTitle, numTests].join(': '),
+ var t = {
+ title: expectedTitle + count,
state: passed ? STATE_PASSED : STATE_FAILED,
isPending: function() {
return false;
@@ -443,36 +349,26 @@ describe('XUnit reporter', function() {
},
duration: 1000
};
+ return t;
};
var runner = new EventEmitter();
createStatsCollector(runner);
var xunit = new XUnit(runner);
expectedWrite = '';
- sandbox.stub(xunit, 'write').callsFake(function(str) {
- expectedWrite += str;
- });
+ xunit.write = function(string) {
+ expectedWrite += string;
+ };
// 3 tests, no failures (i.e. tests that could not run), and 2 errors
- runner.emit(EVENT_TEST_PASS, generateTest(true));
- runner.emit(EVENT_TEST_END);
- runner.emit(EVENT_TEST_FAIL, generateTest(false), simpleError);
- runner.emit(EVENT_TEST_END);
- runner.emit(EVENT_TEST_FAIL, generateTest(false), simpleError);
- runner.emit(EVENT_TEST_END);
- runner.emit(EVENT_RUN_END);
-
- sandbox.restore();
-
- var expectedNumPass = 1;
- var expectedNumFail = 2;
- var expectedNumTests = 3;
-
- expect(expectedNumPass, 'to be', numPass);
- expect(expectedNumFail, 'to be', numFail);
- expect(expectedNumTests, 'to be', numTests);
+ runner.emit('test end');
+ runner.emit('pass', generateTest(true));
+ runner.emit('test end');
+ runner.emit('fail', generateTest(false), simpleError);
+ runner.emit('test end');
+ runner.emit('fail', generateTest(false), simpleError);
+ runner.emit('end');
- // :NOTE: Mocha test "fail" is an XUnit "error"
var expectedTag =
'= 0,
+ 'it should contain the text "Mocha Tests"'
+ );
});
- it('should use default name otherwise', function() {
- var defaultSuiteName = 'Mocha Tests';
+ it('should use the custom suite name as the suite name when provided in the reporter options', function() {
+ // arrange
var options = {
- reporterOptions: {}
+ reporterOptions: {
+ // this time, with a custom suite name
+ suiteName: 'Mocha Is Great!'
+ }
};
var xunit = new XUnit(runner, options);
xunit.fileStream = fileStream;
- // Trigger end event to force XUnit reporter to write its output
- events[EVENT_RUN_END]();
+ // act (trigger the end event to force xunit reporter to write the output)
+ events['end']();
- expect(lines[0], 'to contain', defaultSuiteName);
+ // assert
+ assert(
+ lines[0].indexOf('