From a03e23a23f299dc6665e945623d63b189a4bf55d Mon Sep 17 00:00:00 2001 From: Outsider Date: Tue, 25 Sep 2018 16:29:42 +0900 Subject: [PATCH] fix slow test properly fot dot reporter Signed-off-by: Outsider --- lib/reporters/dot.js | 9 ++- test/reporters/dot.spec.js | 110 +++++++++++++++++++++++-------------- 2 files changed, 74 insertions(+), 45 deletions(-) diff --git a/lib/reporters/dot.js b/lib/reporters/dot.js index 22320e31c3..e4b1d96193 100644 --- a/lib/reporters/dot.js +++ b/lib/reporters/dot.js @@ -8,7 +8,6 @@ var Base = require('./base'); var inherits = require('../utils').inherits; -var color = Base.color; /** * Expose `Dot`. @@ -41,7 +40,7 @@ function Dot(runner) { if (++n % width === 0) { process.stdout.write('\n '); } - process.stdout.write(color('pending', Base.symbols.comma)); + process.stdout.write(Base.color('pending', Base.symbols.comma)); }); runner.on('pass', function(test) { @@ -49,9 +48,9 @@ function Dot(runner) { process.stdout.write('\n '); } if (test.speed === 'slow') { - process.stdout.write(color('bright yellow', Base.symbols.dot)); + process.stdout.write(Base.color('bright yellow', Base.symbols.dot)); } else { - process.stdout.write(color(test.speed, Base.symbols.dot)); + process.stdout.write(Base.color(test.speed, Base.symbols.dot)); } }); @@ -59,7 +58,7 @@ function Dot(runner) { if (++n % width === 0) { process.stdout.write('\n '); } - process.stdout.write(color('fail', Base.symbols.bang)); + process.stdout.write(Base.color('fail', Base.symbols.bang)); }); runner.once('end', function() { diff --git a/test/reporters/dot.spec.js b/test/reporters/dot.spec.js index d1232f5560..0940d8be5f 100644 --- a/test/reporters/dot.spec.js +++ b/test/reporters/dot.spec.js @@ -8,35 +8,60 @@ var createMockRunner = require('./helpers.js').createMockRunner; describe('Dot reporter', function() { var stdout; - var stdoutWrite; var runner; var useColors; var windowWidth; + var color; + var showOutput = false; - beforeEach(function() { - stdout = []; - stdoutWrite = process.stdout.write; + /** + * Run reporter using stream reassignment to capture output. + * + * @param {Object} stubSelf - Reporter-like stub instance + * @param {Runner} runner - Mock instance + * @param {boolean} [tee=false] - If `true`, echo captured output to screen + */ + function runReporter(stubSelf, runner, tee) { + // 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); - stdoutWrite.call(process.stdout, string, enc, callback); + if (tee) { + stdoutWrite.call(process.stdout, string, enc, callback); + } }; + + // Invoke reporter + Dot.call(stubSelf, runner); + + // Revert stream reassignment here so reporter output + // can't be corrupted if any test assertions throw + process.stdout.write = stdoutWrite; + } + + beforeEach(function() { + stdout = []; 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() { Base.useColors = useColors; Base.window.width = windowWidth; - process.stdout.write = stdoutWrite; + Base.color = color; + runner = undefined; }); describe('on start', function() { - it('should return a new line', function() { + it('should write a newline', function() { runner = createMockRunner('start', 'start'); - Dot.call({epilogue: function() {}}, runner); - process.stdout.write = stdoutWrite; + runReporter({epilogue: function() {}}, runner, showOutput); var expectedArray = ['\n']; expect(stdout, 'to equal', expectedArray); }); @@ -46,20 +71,18 @@ describe('Dot reporter', function() { beforeEach(function() { Base.window.width = 2; }); - it('should return a new line and then a coma', function() { + it('should write a newline followed by a comma', function() { runner = createMockRunner('pending', 'pending'); - Dot.call({epilogue: function() {}}, runner); - process.stdout.write = stdoutWrite; - var expectedArray = ['\n ', Base.symbols.comma]; + runReporter({epilogue: function() {}}, runner, showOutput); + var expectedArray = ['\n ', 'pending_' + Base.symbols.comma]; expect(stdout, 'to equal', expectedArray); }); }); describe('if window width is equal to or less than 1', function() { - it('should return a coma', function() { + it('should write a comma', function() { runner = createMockRunner('pending', 'pending'); - Dot.call({epilogue: function() {}}, runner); - process.stdout.write = stdoutWrite; - var expectedArray = [Base.symbols.comma]; + runReporter({epilogue: function() {}}, runner, showOutput); + var expectedArray = ['pending_' + Base.symbols.comma]; expect(stdout, 'to equal', expectedArray); }); }); @@ -76,32 +99,42 @@ describe('Dot reporter', function() { Base.window.width = 2; }); describe('if test speed is fast', function() { - it('should return a new line and then a dot', function() { + it('should write a newline followed by a dot', function() { runner = createMockRunner('pass', 'pass', null, null, test); - Dot.call({epilogue: function() {}}, runner); - process.stdout.write = stdoutWrite; - var expectedArray = ['\n ', Base.symbols.dot]; + runReporter({epilogue: function() {}}, runner, showOutput); + expect(test.speed, 'to equal', 'fast'); + var expectedArray = ['\n ', 'fast_' + Base.symbols.dot]; expect(stdout, 'to equal', expectedArray); }); }); }); describe('if window width is equal to or less than 1', function() { describe('if test speed is fast', function() { - it('should return a dot', function() { + it('should write a grey dot', function() { runner = createMockRunner('pass', 'pass', null, null, test); - Dot.call({epilogue: function() {}}, runner); - process.stdout.write = stdoutWrite; - var expectedArray = [Base.symbols.dot]; + runReporter({epilogue: function() {}}, runner, showOutput); + expect(test.speed, 'to equal', 'fast'); + var expectedArray = ['fast_' + Base.symbols.dot]; expect(stdout, 'to equal', expectedArray); }); }); - describe('if test speed is slow', function() { - it('should return a dot', function() { + describe('if test speed is medium', function() { + it('should write a yellow dot', function() { test.duration = 2; runner = createMockRunner('pass', 'pass', null, null, test); - Dot.call({epilogue: function() {}}, runner); - process.stdout.write = stdoutWrite; - var expectedArray = [Base.symbols.dot]; + runReporter({epilogue: function() {}}, runner, showOutput); + expect(test.speed, 'to equal', 'medium'); + var expectedArray = ['medium_' + Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); + }); + }); + 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); + runReporter({epilogue: function() {}}, runner, showOutput); + expect(test.speed, 'to equal', 'slow'); + var expectedArray = ['bright-yellow_' + Base.symbols.dot]; expect(stdout, 'to equal', expectedArray); }); }); @@ -117,20 +150,18 @@ describe('Dot reporter', function() { beforeEach(function() { Base.window.width = 2; }); - it('should return a new line and then an exclamation mark', function() { + it('should write a newline followed by an exclamation mark', function() { runner = createMockRunner('fail', 'fail', null, null, test); - Dot.call({epilogue: function() {}}, runner); - process.stdout.write = stdoutWrite; - var expectedArray = ['\n ', Base.symbols.bang]; + runReporter({epilogue: function() {}}, runner, showOutput); + 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 return an exclamation mark', function() { + it('should write an exclamation mark', function() { runner = createMockRunner('fail', 'fail', null, null, test); - Dot.call({epilogue: function() {}}, runner); - process.stdout.write = stdoutWrite; - var expectedArray = [Base.symbols.bang]; + runReporter({epilogue: function() {}}, runner, showOutput); + var expectedArray = ['fail_' + Base.symbols.bang]; expect(stdout, 'to equal', expectedArray); }); }); @@ -142,8 +173,7 @@ describe('Dot reporter', function() { var epilogue = function() { epilogueCalled = true; }; - Dot.call({epilogue: epilogue}, runner); - process.stdout.write = stdoutWrite; + runReporter({epilogue: epilogue}, runner, showOutput); expect(epilogueCalled, 'to be', true); }); });