Skip to content

Commit

Permalink
Build: Make dev mode work in Karma again, serve source files from disk
Browse files Browse the repository at this point in the history
PR gh-4550 added support for running ES modules & AMD tests via Karma. This
required reading the `esmodules` & `amd` props from both `QUnit.config` &
`QUnit.urlParams`. By picking these two properties manually, the `dev` one
stopped being respected while ones handled directly by QUnit were fine (like
`hidepassed`). Instead of maintaining the full list of options, the code now
iterates over QUnit URL config and handles the fallbacks in a more generic way.

Apart from that, all jQuery source & test files are now read directly from disk
instead of being cached by Karma so that one can run `grunt karma:chrome-debug`
& work on a fix without restarting that Karma run after each change. A similar
effect could have been achieved by setting `autoWatch` to `true` but then the
main Karma page runs tests in an iframe by default when
`grunt karma:chrome-debug` is run instead of relying on the current debug flow.

Closes gh-4574
Ref gh-4550
  • Loading branch information
mgol committed Jan 7, 2020
1 parent 0f780ba commit 437f389
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 15 deletions.
25 changes: 21 additions & 4 deletions Gruntfile.js
Expand Up @@ -158,14 +158,31 @@ module.exports = function( grunt ) {

"test/jquery.js",

{ pattern: "dist/jquery.*", included: false, served: true },
{ pattern: "src/**", type: "module", included: false, served: true },
{ pattern: "amd/**", included: false, served: true },
{
pattern: "dist/jquery.*",
included: false,
served: true,
nocache: true
},
{
pattern: "src/**",
type: "module",
included: false,
served: true,
nocache: true
},
{
pattern: "amd/**",
included: false,
served: true,
nocache: true
},
{ pattern: "node_modules/**", included: false, served: true },
{
pattern: "test/**/*.@(js|css|jpg|html|xml|svg)",
included: false,
served: true
served: true,
nocache: true
}
],
reporters: [ "dots" ],
Expand Down
33 changes: 22 additions & 11 deletions test/jquery.js
Expand Up @@ -2,29 +2,34 @@
( function() {
/* global loadTests: false */

var dynamicImportSource,
var dynamicImportSource, config, src,
FILEPATH = "/test/jquery.js",
activeScript = [].slice.call( document.getElementsByTagName( "script" ), -1 )[ 0 ],
parentUrl = activeScript && activeScript.src ?
activeScript.src.replace( /[?#].*/, "" ) + FILEPATH.replace( /[^/]+/g, ".." ) + "/" :
"../",
QUnit = window.QUnit,
require = window.require,
require = window.require;

function getQUnitConfig() {
var config = Object.create( null );

// Default to unminified jQuery for directly-opened iframes
config = QUnit ?
if ( !QUnit ) {
config.dev = true;
} else {

// QUnit.config is populated from QUnit.urlParams but only at the beginning
// of the test run. We need to read both.
{
esmodules: !!( QUnit.config.esmodules || QUnit.urlParams.esmodules ),
amd: !!( QUnit.config.amd || QUnit.urlParams.amd )
} :
QUnit.config.urlConfig.forEach( function( entry ) {
config[ entry.id ] = QUnit.config[ entry.id ] != null ?
QUnit.config[ entry.id ] :
QUnit.urlParams[ entry.id ];
} );
}

{ dev: true },
src = config.dev ?
"dist/jquery.js" :
"dist/jquery.min.js";
return config;
}

// Define configuration parameters controlling how jQuery is loaded
if ( QUnit ) {
Expand All @@ -43,6 +48,12 @@
} );
}

config = getQUnitConfig();

src = config.dev ?
"dist/jquery.js" :
"dist/jquery.min.js";

// Honor ES modules loading on the main window (detected by seeing QUnit on it).
// This doesn't apply to iframes because they synchronously expect jQuery to be there.
if ( config.esmodules && QUnit ) {
Expand Down

0 comments on commit 437f389

Please sign in to comment.