DEV: Add source-map-support in tests for qunit stack-traces (#23653)

The source-map-support package uses JS sourcemaps to improve the human-readability of Error#stack stacktraces.
This commit is contained in:
David Taylor 2023-09-26 13:15:49 +01:00 committed by GitHub
parent 2a10ea0e3f
commit 42070d49da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 57 additions and 3 deletions

View File

@ -71,6 +71,9 @@ module.exports = function (defaults) {
util: require.resolve("util/"),
// Also for sinon
timers: false,
// For source-map-support
path: require.resolve("path-browserify"),
fs: false,
},
},
module: {
@ -226,6 +229,13 @@ module.exports = function (defaults) {
},
},
},
resolve: {
fallback: {
// For source-map-support
path: require.resolve("path-browserify"),
fs: false,
},
},
},
},
});

View File

@ -95,6 +95,7 @@
"loader.js": "^4.7.0",
"message-bus-client": "^4.3.8",
"messageformat": "0.1.5",
"path-browserify": "^1.0.1",
"pretender": "^3.4.7",
"qunit": "^2.20.0",
"qunit-dom": "^2.0.0",
@ -103,6 +104,7 @@
"sinon": "^16.0.0",
"float-kit": "1.0.0",
"source-map": "^0.7.4",
"source-map-support": "^0.5.21",
"terser": "^5.20.0",
"truth-helpers": "1.0.0",
"util": "^0.12.5",

View File

@ -41,6 +41,13 @@ import SiteSettingService from "discourse/services/site-settings";
import jQuery from "jquery";
import { setupDeprecationCounter } from "discourse/tests/helpers/deprecation-counter";
import { configureRaiseOnDeprecation } from "discourse/tests/helpers/raise-on-deprecation";
import SourceMapSupport from "source-map-support";
// Updates Error.stack to include source-mapped locations.
// Makes QUnit errors more human-readable
SourceMapSupport.install({
handleUncaughtExceptions: false,
});
const Plugin = $.fn.modal;
const Modal = Plugin.Constructor;
@ -301,8 +308,18 @@ export default function setupTests(config) {
throw new Error(error);
};
pretender.checkPassthrough = (request) =>
request.requestHeaders["Discourse-Script"];
pretender.checkPassthrough = (request) => {
const requestUrl = new URL(request.url, location.href);
if (
requestUrl.origin === location.origin &&
requestUrl.pathname.startsWith("/assets/")
) {
// Likely a request from source-map-support package
return true;
}
return request.requestHeaders["Discourse-Script"];
};
applyPretender(ctx.module, pretender, pretenderHelpers());
@ -394,6 +411,7 @@ export default function setupTests(config) {
setupToolbar();
reportMemoryUsageAfterTests();
patchFailedAssertion();
patchStacktraceOrigin();
if (!hasPluginJs && !hasThemeJs) {
configureRaiseOnDeprecation();
@ -421,6 +439,25 @@ function patchFailedAssertion() {
};
}
/**
* Stacktraces tend to look something like `http://localhost:4200/assets/...`.
* This patch removes the `http://localhost:4200` part to make things cleaner.
*/
function patchStacktraceOrigin() {
const oldPushResult = QUnit.assert.pushResult;
QUnit.assert.pushResult = function (resultInfo) {
if (resultInfo.source) {
resultInfo.source = resultInfo.source.replaceAll(
`${window.origin}/`,
"/"
);
}
oldPushResult.call(this, resultInfo);
};
}
function handleLegacyParameters() {
for (const param of [
"qunit_single_plugin",

View File

@ -8781,6 +8781,11 @@ patch-package@^8.0.0:
tmp "^0.0.33"
yaml "^2.2.2"
path-browserify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
path-exists@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@ -9860,7 +9865,7 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
source-map-support@~0.5.20:
source-map-support@^0.5.21, source-map-support@~0.5.20:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==