Build: Run the basic test suite in jsdom

The basic test suite is now run in jsdom on all supported Node.js versions
(8, 10 & 11 as of now).

Closes gh-4310
This commit is contained in:
Michał Gołębiowski-Owczarek 2019-03-11 20:03:54 +01:00 committed by GitHub
parent 84b6a0beb1
commit 0ec25abba2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 98 additions and 4 deletions

View File

@ -14,7 +14,15 @@ module.exports = function( grunt ) {
var fs = require( "fs" ), var fs = require( "fs" ),
gzip = require( "gzip-js" ), gzip = require( "gzip-js" ),
isTravis = process.env.TRAVIS; isTravis = process.env.TRAVIS,
oldNode = /^v6\./.test( process.version );
// Support: Node.js <8
// Skip running tasks that dropped support for Node.js 6
// in those Node versions.
function runIfNewNode( task ) {
return oldNode ? "print_old_node_message:" + task : task;
}
if ( !grunt.option( "filename" ) ) { if ( !grunt.option( "filename" ) ) {
grunt.option( "filename", "jquery.js" ); grunt.option( "filename", "jquery.js" );
@ -220,6 +228,33 @@ module.exports = function( grunt ) {
browsers: [ isTravis ? "ChromeHeadlessNoSandbox" : "ChromeHeadless" ] browsers: [ isTravis ? "ChromeHeadlessNoSandbox" : "ChromeHeadless" ]
}, },
jsdom: {
options: {
files: [
"test/data/jquery-1.9.1.js",
"test/data/testinit-jsdom.js",
// We don't support various loading methods like AMD,
// choosing a version etc. for jsdom.
"dist/jquery.js",
// Replacement for testinit.js#loadTests()
"test/data/testrunner.js",
// jsdom only runs basic tests
"test/unit/basic.js",
{ pattern: "external/**", included: false, served: true },
{
pattern: "test/**/*.@(js|css|jpg|html|xml|svg)",
included: false,
served: true
}
]
},
browsers: [ "jsdom" ]
},
// To debug tests with Karma: // To debug tests with Karma:
// 1. Run 'grunt karma:chrome-debug' or 'grunt karma:firefox-debug' // 1. Run 'grunt karma:chrome-debug' or 'grunt karma:firefox-debug'
// (any karma subtask that has singleRun=false) // (any karma subtask that has singleRun=false)
@ -285,6 +320,13 @@ module.exports = function( grunt ) {
// Integrate jQuery specific tasks // Integrate jQuery specific tasks
grunt.loadTasks( "build/tasks" ); grunt.loadTasks( "build/tasks" );
// Support: Node.js <8
// Print a message on Node.js <8 notifying the task is skipped there.
grunt.registerTask( "print_old_node_message", function() {
var task = [].slice.call( arguments ).join( ":" );
grunt.log.writeln( "Old Node.js detected, running the task \"" + task + "\" skipped..." );
} );
grunt.registerTask( "lint", [ grunt.registerTask( "lint", [
"jsonlint", "jsonlint",
@ -305,7 +347,13 @@ module.exports = function( grunt ) {
] ); ] );
grunt.registerTask( "test:fast", "node_smoke_tests" ); grunt.registerTask( "test:fast", "node_smoke_tests" );
grunt.registerTask( "test:slow", "promises_aplus_tests" ); grunt.registerTask( "test:slow", [
"promises_aplus_tests",
// Support: Node.js <8
// Karma no longer supports Node.js <8 as it relies on async-await internally.
runIfNewNode( "karma:jsdom" )
] );
grunt.registerTask( "test", [ grunt.registerTask( "test", [
"test:fast", "test:fast",

View File

@ -51,6 +51,7 @@
"karma-chrome-launcher": "2.2.0", "karma-chrome-launcher": "2.2.0",
"karma-firefox-launcher": "1.1.0", "karma-firefox-launcher": "1.1.0",
"karma-ie-launcher": "1.0.0", "karma-ie-launcher": "1.0.0",
"karma-jsdom-launcher": "7.1.0",
"karma-qunit": "3.0.0", "karma-qunit": "3.0.0",
"load-grunt-tasks": "4.0.0", "load-grunt-tasks": "4.0.0",
"native-promise-only": "0.8.1", "native-promise-only": "0.8.1",

View File

@ -55,7 +55,10 @@
"overrides": [ "overrides": [
{ {
"files": ["data/core/jquery-iterability-transpiled-es6.js"], "files": [
"data/core/jquery-iterability-transpiled-es6.js",
"data/testinit-jsdom.js"
],
"parserOptions": { "parserOptions": {
"ecmaVersion": 2015 "ecmaVersion": 2015
} }

View File

@ -0,0 +1,40 @@
"use strict";
// Support: jsdom 13.2+
// jsdom implements a throwing `window.scrollTo`.
QUnit.config.scrolltop = false;
const FILEPATH = "/test/data/testinit-jsdom.js";
const activeScript = document.currentScript;
const parentUrl = activeScript && activeScript.src ?
activeScript.src.replace( /[?#].*/, "" ) + FILEPATH.replace( /[^/]+/g, ".." ) + "/" :
"../";
const supportjQuery = this.jQuery;
// baseURL is intentionally set to "data/" instead of "".
// This is not just for convenience (since most files are in data/)
// but also to ensure that urls without prefix fail.
// Otherwise it's easy to write tests that pass on test/index.html
// but fail in Karma runner (where the baseURL is different).
const baseURL = parentUrl + "test/data/";
// Setup global variables before loading jQuery for testing .noConflict()
supportjQuery.noConflict( true );
window.originaljQuery = this.jQuery = undefined;
window.original$ = this.$ = "replaced";
/**
* Add random number to url to stop caching
*
* Also prefixes with baseURL automatically.
*
* @example url("index.html")
* @result "data/index.html?10538358428943"
*
* @example url("mock.php?foo=bar")
* @result "data/mock.php?foo=bar&10538358345554"
*/
function url( value ) {
return baseURL + value + ( /\?/.test( value ) ? "&" : "?" ) +
new Date().getTime() + "" + parseInt( Math.random() * 100000, 10 );
}

View File

@ -193,7 +193,9 @@ QUnit.test( "manipulation", function( assert ) {
); );
} ); } );
QUnit.test( "offset", function( assert ) { // Support: jsdom 13.2+
// jsdom returns 0 for offset-related properties
QUnit[ /jsdom\//.test( navigator.userAgent ) ? "skip" : "test" ]( "offset", function( assert ) {
assert.expect( 3 ); assert.expect( 3 );
var parent = jQuery( "<div style='position:fixed;top:20px;'/>" ).appendTo( "#qunit-fixture" ), var parent = jQuery( "<div style='position:fixed;top:20px;'/>" ).appendTo( "#qunit-fixture" ),