diff --git a/test/reporters/tap.spec.js b/test/reporters/tap.spec.js index 2ac4eb2c2b..67632210e3 100644 --- a/test/reporters/tap.spec.js +++ b/test/reporters/tap.spec.js @@ -4,22 +4,18 @@ var reporters = require('../../').reporters; var TAP = reporters.TAP; var createMockRunner = require('./helpers').createMockRunner; +var makeRunReporter = require('./helpers.js').createRunReporterFunction; describe('TAP reporter', function() { - var stdout; - var stdoutWrite; + var ECHO = true; var runner; + var options = {}; + var runReporter = makeRunReporter(TAP); var expectedTitle = 'some title'; var countAfterTestEnd = 2; var test; beforeEach(function() { - stdout = []; - stdoutWrite = process.stdout.write; - process.stdout.write = function(string, enc, callback) { - stdout.push(string); - stdoutWrite.call(process.stdout, string, enc, callback); - }; test = { fullTitle: function() { return expectedTitle; @@ -29,27 +25,33 @@ describe('TAP reporter', function() { }); afterEach(function() { - process.stdout.write = stdoutWrite; + runner = undefined; + test = undefined; }); describe('TAP12 spec', function() { var options = {}; describe('on start', function() { - it('should write the number of tests that it plans to run', function() { - var expectedSuite = 'some suite'; - var expectedTotal = 10; - var expectedString; + 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; }; - TAP.call({}, runner, options); + stdout = runReporter({}, runner, options); + }); + 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']; - process.stdout.write = stdoutWrite; - expect(stdout, 'to equal', expectedArray); expect(expectedString, 'to be', expectedSuite); }); @@ -66,9 +68,8 @@ describe('TAP reporter', function() { ); runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedMessage = 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; @@ -79,12 +80,10 @@ describe('TAP reporter', function() { 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() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedMessage = 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; @@ -95,18 +94,18 @@ describe('TAP reporter', function() { describe('on fail', function() { describe('if there is an error message', function() { it('should write expected message and error message', function() { - var expectedTitle = 'some title'; - var countAfterTestEnd = 2; var expectedErrorMessage = 'some error'; - var test = { - fullTitle: function() { - return expectedTitle; - }, - slow: function() {} - }; var error = { message: expectedErrorMessage }; + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', + null, + test, + error + ); runner.on = function(event, callback) { if (event === 'test end') { callback(); @@ -116,9 +115,8 @@ describe('TAP reporter', function() { }; runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedArray = [ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', @@ -143,9 +141,8 @@ describe('TAP reporter', function() { ); runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedArray = [ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', @@ -156,20 +153,20 @@ describe('TAP reporter', function() { }); describe('if there is an error stack and error message', function() { it('should write expected message and stack', function() { - var expectedTitle = 'some title'; - var countAfterTestEnd = 2; var expectedStack = 'some stack'; var expectedErrorMessage = 'some error'; - var test = { - fullTitle: function() { - return expectedTitle; - }, - slow: function() {} - }; 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(); @@ -179,9 +176,8 @@ describe('TAP reporter', function() { }; runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedArray = [ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', @@ -194,6 +190,14 @@ describe('TAP reporter', function() { 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(); @@ -203,9 +207,8 @@ describe('TAP reporter', function() { }; runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedArray = [ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' @@ -221,9 +224,8 @@ describe('TAP reporter', function() { runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test); runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var totalTests = numberOfPasses + numberOfFails; var expectedArray = [ @@ -245,21 +247,29 @@ describe('TAP reporter', function() { } }; describe('on start', function() { - it('should write the number of tests that it plans to run', function() { - var expectedSuite = 'some suite'; - var expectedTotal = 10; - var expectedString; + 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; }; - TAP.call({}, runner, options); - var expectedSecondLine = '1..' + expectedTotal + '\n'; - process.stdout.write = stdoutWrite; + 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 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); }); @@ -276,9 +286,8 @@ describe('TAP reporter', function() { ); runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedMessage = 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; @@ -289,12 +298,10 @@ describe('TAP reporter', function() { 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() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedMessage = 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; @@ -305,18 +312,18 @@ describe('TAP reporter', function() { describe('on fail', function() { describe('if there is an error message', function() { it('should write expected message and error message', function() { - var expectedTitle = 'some title'; - var countAfterTestEnd = 2; var expectedErrorMessage = 'some error'; - var test = { - fullTitle: function() { - return expectedTitle; - }, - slow: function() {} - }; var error = { message: expectedErrorMessage }; + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', + null, + test, + error + ); runner.on = function(event, callback) { if (event === 'test end') { callback(); @@ -326,9 +333,8 @@ describe('TAP reporter', function() { }; runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedArray = [ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', @@ -356,9 +362,8 @@ describe('TAP reporter', function() { ); runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedArray = [ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', @@ -372,20 +377,20 @@ describe('TAP reporter', function() { }); describe('if there is an error stack and error message', function() { it('should write expected message and stack', function() { - var expectedTitle = 'some title'; - var countAfterTestEnd = 2; var expectedStack = 'some stack'; var expectedErrorMessage = 'some error'; - var test = { - fullTitle: function() { - return expectedTitle; - }, - slow: function() {} - }; 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(); @@ -395,9 +400,8 @@ describe('TAP reporter', function() { }; runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedArray = [ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', @@ -414,6 +418,14 @@ describe('TAP reporter', function() { 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(); @@ -423,9 +435,8 @@ describe('TAP reporter', function() { }; runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var expectedArray = [ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' @@ -442,9 +453,8 @@ describe('TAP reporter', function() { runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test); runner.suite = ''; runner.grepTotal = function() {}; - TAP.call({}, runner, options); - process.stdout.write = stdoutWrite; + var stdout = runReporter({}, runner, options); var totalTests = numberOfPasses + numberOfFails; var expectedArray = [