Skip to content

Commit

Permalink
Build: Test on Node 17, update Grunt & karma-* packages
Browse files Browse the repository at this point in the history
This adds testing on Node.js 17 in addition to the currently tested 10, 12, 14
and 16 versions.

Also, update Grunt & `karma-*` packages.

Testing in Karma on jsdom is broken in Node 17 at the moment; until we find
a fix, this change disables such testing on Node 17 or newer.

Node smoke tests & promises aplus tests are disabled on Node.js 10 as they
depend on jsdom and the latest jsdom version doesn't run properly on Node 10.

Closes gh-5023

(cherry picked from commit 2525cff)
  • Loading branch information
mgol committed Mar 14, 2022
1 parent be3bd56 commit 9bc0df7
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 24 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/node.js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ jobs:
fail-fast: false
matrix:
# Node.js 10 is required by jQuery infra
NODE_VERSION: [10.x, 12.x, 14.x, 16.x]
# Do not remove 16.x until jsdom tests are re-enabled on newer Node.js versions.
NODE_VERSION: [10.x, 12.x, 14.x, 16.x, 17.x]
NPM_SCRIPT: ["test:browserless"]
include:
- NAME: "Browser tests: full build, Chrome & Firefox stable"
Expand Down
42 changes: 32 additions & 10 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,17 @@ module.exports = function( grunt ) {
return data;
}

// Support: Node.js <12
// Skip running tasks that dropped support for Node.js 10
// in this Node version.
function runIfNewNode( task ) {
return oldNode ? "print_old_node_message:" + task : task;
}

var fs = require( "fs" ),
gzip = require( "gzip-js" ),
oldNode = /^v10\./.test( process.version ),
nodeV17OrNewer = !/^v1[0246]\./.test( process.version ),
isCi = process.env.GITHUB_ACTION,
ciBrowsers = process.env.BROWSERS && process.env.BROWSERS.split( "," );

Expand Down Expand Up @@ -333,29 +342,42 @@ module.exports = function( grunt ) {
// Integrate jQuery specific tasks
grunt.loadTasks( "build/tasks" );

grunt.registerTask( "print_old_node_message", ( ...args ) => {
var task = args.join( ":" );
grunt.log.writeln( "Old Node.js detected, running the task \"" + task + "\" skipped..." );
} );

grunt.registerTask( "print_jsdom_message", () => {
grunt.log.writeln( "Node.js 17 or newer detected, skipping jsdom tests..." );
} );

grunt.registerTask( "lint", [
"jsonlint",

// Running the full eslint task without breaking it down to targets
// would run the dist target first which would point to errors in the built
// file, making it harder to fix them. We want to check the built file only
// if we already know the source files pass the linter.
"eslint:dev",
"eslint:dist"
runIfNewNode( "eslint:dev" ),
runIfNewNode( "eslint:dist" )
] );

grunt.registerTask( "lint:newer", [
"newer:jsonlint",

// Don't replace it with just the task; see the above comment.
"newer:eslint:dev",
"newer:eslint:dist"
runIfNewNode( "newer:eslint:dev" ),
runIfNewNode( "newer:eslint:dist" )
] );

grunt.registerTask( "test:fast", "node_smoke_tests" );
grunt.registerTask( "test:fast", runIfNewNode( "node_smoke_tests" ) );
grunt.registerTask( "test:slow", [
"promises_aplus_tests",
"karma:jsdom"
runIfNewNode( "promises_aplus_tests" ),

// Support: Node.js 17+
// jsdom fails to connect to the Karma server in Node 17+.
// Until we figure out a fix, skip jsdom tests there.
nodeV17OrNewer ? "print_jsdom_message" : runIfNewNode( "karma:jsdom" )
] );

grunt.registerTask( "test:prepare", [
Expand All @@ -371,7 +393,7 @@ module.exports = function( grunt ) {

grunt.registerTask( "dev", [
"build:*:*",
"newer:eslint:dev",
runIfNewNode( "newer:eslint:dev" ),
"newer:uglify",
"remove_map_comment",
"dist:*",
Expand All @@ -380,13 +402,13 @@ module.exports = function( grunt ) {
] );

grunt.registerTask( "default", [
"eslint:dev",
runIfNewNode( "eslint:dev" ),
"build:*:*",
"uglify",
"remove_map_comment",
"dist:*",
"test:prepare",
"eslint:dist",
runIfNewNode( "eslint:dist" ),
"test:fast",
"compare_size"
] );
Expand Down
26 changes: 13 additions & 13 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,29 +30,29 @@
"commitplease": "3.2.0",
"core-js": "2.6.5",
"eslint-config-jquery": "3.0.0",
"grunt": "1.3.0",
"grunt": "1.4.1",
"grunt-babel": "8.0.0",
"grunt-cli": "1.3.2",
"grunt-cli": "1.4.3",
"grunt-compare-size": "0.4.2",
"grunt-contrib-uglify": "3.4.0",
"grunt-contrib-watch": "1.1.0",
"grunt-eslint": "22.0.0",
"grunt-git-authors": "3.2.0",
"grunt-jsonlint": "1.1.0",
"grunt-karma": "4.0.0",
"grunt-jsonlint": "2.1.2",
"grunt-karma": "4.0.2",
"grunt-newer": "1.3.0",
"grunt-npmcopy": "0.2.0",
"gzip-js": "0.3.2",
"husky": "1.3.1",
"insight": "0.10.1",
"jsdom": "13.2.0",
"karma": "5.2.3",
"karma-browserstack-launcher": "1.4.0",
"karma-chrome-launcher": "2.2.0",
"karma-firefox-launcher": "1.1.0",
"husky": "4.2.5",
"insight": "0.10.3",
"jsdom": "19.0.0",
"karma": "^6.3.17",
"karma-browserstack-launcher": "1.6.0",
"karma-chrome-launcher": "3.1.1",
"karma-firefox-launcher": "2.1.2",
"karma-ie-launcher": "1.0.0",
"karma-jsdom-launcher": "8.0.2",
"karma-qunit": "3.0.0",
"karma-jsdom-launcher": "12.0.0",
"karma-qunit": "4.1.2",
"load-grunt-tasks": "5.1.0",
"native-promise-only": "0.8.1",
"promises-aplus-tests": "2.1.2",
Expand Down

0 comments on commit 9bc0df7

Please sign in to comment.