Skip to content

Commit

Permalink
Merge pull request #925 from leobalter/improve-test-on-node
Browse files Browse the repository at this point in the history
Improve test-on-node grunt task
  • Loading branch information
Krinkle committed Feb 21, 2016
2 parents b1adc1d + cd6339f commit ddd2e6a
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 55 deletions.
75 changes: 20 additions & 55 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ grunt.initConfig({
all: [
"*.js",
"{test,dist}/**/*.js",
"build/*.js"
"build/*.js",
"build/tasks/**/*.js"
]
},
jscs: {
Expand Down Expand Up @@ -125,6 +126,23 @@ grunt.initConfig({
src: "build/report/lcov/lcov.info"
}
},
"test-on-node": {
files: [
"test/logs",
"test/main/test",
"test/main/assert",
"test/main/async",
"test/main/promise",
"test/main/modules",
"test/main/deepEqual",
"test/main/stack",
"test/globals-node",
"test/only",
"test/setTimeout",
"test/main/dump",
"test/reporter-html/diff"
]
},
concurrent: {
build: [
"concat:src-js",
Expand Down Expand Up @@ -156,60 +174,7 @@ grunt.initConfig({
}
});

// TODO: Extract this task later, if feasible
// Also spawn a separate process to keep tests atomic
grunt.registerTask( "test-on-node", function() {
var testActive = false,
runDone = false,
done = this.async(),
QUnit = require( "./dist/qunit" );

global.QUnit = QUnit;

QUnit.testStart(function() {
testActive = true;
});
QUnit.log(function( details ) {
if ( !testActive || details.result ) {
return;
}
var message = "name: " + details.name + " module: " + details.module +
" message: " + details.message;
grunt.log.error( message );
});
QUnit.testDone(function() {
testActive = false;
});
QUnit.done(function( details ) {
if ( runDone ) {
return;
}
var succeeded = ( details.failed === 0 ),
message = details.total + " assertions in (" + details.runtime + "ms), passed: " +
details.passed + ", failed: " + details.failed;
if ( succeeded ) {
grunt.log.ok( message );
} else {
grunt.log.error( message );
}
done( succeeded );
runDone = true;
});
QUnit.config.autorun = false;

require( "./test/logs" );
require( "./test/main/test" );
require( "./test/main/assert" );
require( "./test/main/async" );
require( "./test/main/promise" );
require( "./test/main/modules" );
require( "./test/main/deepEqual" );
require( "./test/main/stack" );
require( "./test/globals-node" );

QUnit.load();
});

grunt.loadTasks( "build/tasks" );
grunt.registerTask( "build", [ "concat" ] );
grunt.registerTask( "default", [ "concurrent:build", "concurrent:test" ] );

Expand Down
95 changes: 95 additions & 0 deletions build/tasks/test-on-node.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/*jshint node:true */
"use strict";

var async = require( "async" );
var path = require( "path" );

module.exports = function( grunt ) {
grunt.registerMultiTask( "test-on-node", function() {
var runs = this.data.map( function( file ) {
return function( runEnd ) {
runQUnit( file, runEnd );
};
});

var done = this.async();

async.series( runs, function( error, result ) {
var total = result.reduce(function( previous, details ) {
return previous + details.total;
}, 0 );
var failed = result.reduce(function( previous, details ) {
return previous + details.failed;
}, 0 );
var runtime = result.reduce(function( previous, details ) {
return previous + details.runtime;
}, 0 );

grunt.log.writeln( "-----" );
grunt.log.ok( total + " total assertions (in " + runtime + "ms) , " +
"with " + failed + " failed assertions" );

done( !error );
});
});

function runQUnit( file, runEnd ) {

// Resolve current QUnit path and remove it from the require cache
// to avoid stacking the QUnit logs.
var QUnitFile = path.resolve( __dirname, "../../dist/qunit.js" );
delete require.cache[ QUnitFile ];

var QUnit = require( QUnitFile );

// Expose QUnit to the global scope to be seen on the other tests.
global.QUnit = QUnit;

registerEvents( QUnit, file, runEnd );

QUnit.config.autorun = false;

require( "../../" + file );

QUnit.load();
}

function registerEvents( QUnit, file, runEnd ) {
var runDone = false;
var testActive = false;

QUnit.begin( function() {
grunt.log.ok( "Testing " + file + " ..." );
});
QUnit.testStart( function() {
testActive = true;
});
QUnit.log( function( details ) {
if ( !testActive || details.result ) {
return;
}
var message = "name: " + details.name + " module: " + details.module +
" message: " + details.message;
grunt.log.error( message );
});
QUnit.testDone( function() {
testActive = false;
});
QUnit.done( function( details ) {
if ( runDone ) {
return;
}
var message = details.total + " assertions (in " + details.runtime + "ms), passed: " +
details.passed + ", failed: " + details.failed;

if ( details.failed ) {
grunt.log.error( message );
} else {
grunt.log.ok( message );
}

runDone = true;
runEnd( details.failed, details );
});
}
};
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
],
"dependencies": {},
"devDependencies": {
"async": "1.4.2",
"browserstack-runner": "0.3.7",
"commitplease": "2.0.0",
"grunt": "0.4.5",
Expand Down

0 comments on commit ddd2e6a

Please sign in to comment.