This run took 350 seconds.
$ date --- stdout --- Sun Sep 28 00:24:10 UTC 2025 --- end --- $ git clone file:///srv/git/mediawiki-core.git repo --depth=1 -b REL1_44 --- stderr --- Cloning into 'repo'... Updating files: 70% (8088/11404) Updating files: 71% (8097/11404) Updating files: 72% (8211/11404) Updating files: 73% (8325/11404) Updating files: 74% (8439/11404) Updating files: 75% (8553/11404) Updating files: 76% (8668/11404) Updating files: 77% (8782/11404) Updating files: 78% (8896/11404) Updating files: 79% (9010/11404) Updating files: 80% (9124/11404) Updating files: 81% (9238/11404) Updating files: 82% (9352/11404) Updating files: 83% (9466/11404) Updating files: 84% (9580/11404) Updating files: 85% (9694/11404) Updating files: 86% (9808/11404) Updating files: 87% (9922/11404) Updating files: 88% (10036/11404) Updating files: 89% (10150/11404) Updating files: 90% (10264/11404) Updating files: 91% (10378/11404) Updating files: 92% (10492/11404) Updating files: 93% (10606/11404) Updating files: 94% (10720/11404) Updating files: 95% (10834/11404) Updating files: 96% (10948/11404) Updating files: 97% (11062/11404) Updating files: 98% (11176/11404) Updating files: 99% (11290/11404) Updating files: 100% (11404/11404) Updating files: 100% (11404/11404), done. --- stdout --- --- end --- $ git config user.name libraryupgrader --- stdout --- --- end --- $ git config user.email tools.libraryupgrader@tools.wmflabs.org --- stdout --- --- end --- $ git submodule update --init --- stderr --- Submodule 'extensions/AbuseFilter' (https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter) registered for path 'extensions/AbuseFilter' Submodule 'extensions/CategoryTree' (https://gerrit.wikimedia.org/r/mediawiki/extensions/CategoryTree) registered for path 'extensions/CategoryTree' Submodule 'extensions/CheckUser' (https://gerrit.wikimedia.org/r/mediawiki/extensions/CheckUser) registered for path 'extensions/CheckUser' Submodule 'extensions/Cite' (https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite) registered for path 'extensions/Cite' Submodule 'extensions/CiteThisPage' (https://gerrit.wikimedia.org/r/mediawiki/extensions/CiteThisPage) registered for path 'extensions/CiteThisPage' Submodule 'extensions/CodeEditor' (https://gerrit.wikimedia.org/r/mediawiki/extensions/CodeEditor) registered for path 'extensions/CodeEditor' Submodule 'extensions/ConfirmEdit' (https://gerrit.wikimedia.org/r/mediawiki/extensions/ConfirmEdit) registered for path 'extensions/ConfirmEdit' Submodule 'extensions/DiscussionTools' (https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools) registered for path 'extensions/DiscussionTools' Submodule 'extensions/Echo' (https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo) registered for path 'extensions/Echo' Submodule 'extensions/Gadgets' (https://gerrit.wikimedia.org/r/mediawiki/extensions/Gadgets) registered for path 'extensions/Gadgets' Submodule 'extensions/ImageMap' (https://gerrit.wikimedia.org/r/mediawiki/extensions/ImageMap) registered for path 'extensions/ImageMap' Submodule 'extensions/InputBox' (https://gerrit.wikimedia.org/r/mediawiki/extensions/InputBox) registered for path 'extensions/InputBox' Submodule 'extensions/Interwiki' (https://gerrit.wikimedia.org/r/mediawiki/extensions/Interwiki) registered for path 'extensions/Interwiki' Submodule 'extensions/Linter' (https://gerrit.wikimedia.org/r/mediawiki/extensions/Linter) registered for path 'extensions/Linter' Submodule 'extensions/LoginNotify' (https://gerrit.wikimedia.org/r/mediawiki/extensions/LoginNotify) registered for path 'extensions/LoginNotify' Submodule 'extensions/Math' (https://gerrit.wikimedia.org/r/mediawiki/extensions/Math) registered for path 'extensions/Math' Submodule 'extensions/MultimediaViewer' (https://gerrit.wikimedia.org/r/mediawiki/extensions/MultimediaViewer) registered for path 'extensions/MultimediaViewer' Submodule 'extensions/Nuke' (https://gerrit.wikimedia.org/r/mediawiki/extensions/Nuke) registered for path 'extensions/Nuke' Submodule 'extensions/OATHAuth' (https://gerrit.wikimedia.org/r/mediawiki/extensions/OATHAuth) registered for path 'extensions/OATHAuth' Submodule 'extensions/PageImages' (https://gerrit.wikimedia.org/r/mediawiki/extensions/PageImages) registered for path 'extensions/PageImages' Submodule 'extensions/ParserFunctions' (https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserFunctions) registered for path 'extensions/ParserFunctions' Submodule 'extensions/PdfHandler' (https://gerrit.wikimedia.org/r/mediawiki/extensions/PdfHandler) registered for path 'extensions/PdfHandler' Submodule 'extensions/Poem' (https://gerrit.wikimedia.org/r/mediawiki/extensions/Poem) registered for path 'extensions/Poem' Submodule 'extensions/ReplaceText' (https://gerrit.wikimedia.org/r/mediawiki/extensions/ReplaceText) registered for path 'extensions/ReplaceText' Submodule 'extensions/Scribunto' (https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto) registered for path 'extensions/Scribunto' Submodule 'extensions/SecureLinkFixer' (https://gerrit.wikimedia.org/r/mediawiki/extensions/SecureLinkFixer) registered for path 'extensions/SecureLinkFixer' Submodule 'extensions/SpamBlacklist' (https://gerrit.wikimedia.org/r/mediawiki/extensions/SpamBlacklist) registered for path 'extensions/SpamBlacklist' Submodule 'extensions/SyntaxHighlight_GeSHi' (https://gerrit.wikimedia.org/r/mediawiki/extensions/SyntaxHighlight_GeSHi) registered for path 'extensions/SyntaxHighlight_GeSHi' Submodule 'extensions/TemplateData' (https://gerrit.wikimedia.org/r/mediawiki/extensions/TemplateData) registered for path 'extensions/TemplateData' Submodule 'extensions/TemplateStyles' (https://gerrit.wikimedia.org/r/mediawiki/extensions/TemplateStyles) registered for path 'extensions/TemplateStyles' Submodule 'extensions/TextExtracts' (https://gerrit.wikimedia.org/r/mediawiki/extensions/TextExtracts) registered for path 'extensions/TextExtracts' Submodule 'extensions/Thanks' (https://gerrit.wikimedia.org/r/mediawiki/extensions/Thanks) registered for path 'extensions/Thanks' Submodule 'extensions/TitleBlacklist' (https://gerrit.wikimedia.org/r/mediawiki/extensions/TitleBlacklist) registered for path 'extensions/TitleBlacklist' Submodule 'extensions/VisualEditor' (https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor) registered for path 'extensions/VisualEditor' Submodule 'extensions/WikiEditor' (https://gerrit.wikimedia.org/r/mediawiki/extensions/WikiEditor) registered for path 'extensions/WikiEditor' Submodule 'skins/MinervaNeue' (https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue) registered for path 'skins/MinervaNeue' Submodule 'skins/MonoBook' (https://gerrit.wikimedia.org/r/mediawiki/skins/MonoBook) registered for path 'skins/MonoBook' Submodule 'skins/Timeless' (https://gerrit.wikimedia.org/r/mediawiki/skins/Timeless) registered for path 'skins/Timeless' Submodule 'skins/Vector' (https://gerrit.wikimedia.org/r/mediawiki/skins/Vector) registered for path 'skins/Vector' Submodule 'vendor' (https://gerrit.wikimedia.org/r/mediawiki/vendor) registered for path 'vendor' Cloning into '/src/repo/extensions/AbuseFilter'... Cloning into '/src/repo/extensions/CategoryTree'... Cloning into '/src/repo/extensions/CheckUser'... Cloning into '/src/repo/extensions/Cite'... Cloning into '/src/repo/extensions/CiteThisPage'... Cloning into '/src/repo/extensions/CodeEditor'... Cloning into '/src/repo/extensions/ConfirmEdit'... Cloning into '/src/repo/extensions/DiscussionTools'... Cloning into '/src/repo/extensions/Echo'... Cloning into '/src/repo/extensions/Gadgets'... Cloning into '/src/repo/extensions/ImageMap'... Cloning into '/src/repo/extensions/InputBox'... Cloning into '/src/repo/extensions/Interwiki'... Cloning into '/src/repo/extensions/Linter'... Cloning into '/src/repo/extensions/LoginNotify'... Cloning into '/src/repo/extensions/Math'... Cloning into '/src/repo/extensions/MultimediaViewer'... Cloning into '/src/repo/extensions/Nuke'... Cloning into '/src/repo/extensions/OATHAuth'... Cloning into '/src/repo/extensions/PageImages'... Cloning into '/src/repo/extensions/ParserFunctions'... Cloning into '/src/repo/extensions/PdfHandler'... Cloning into '/src/repo/extensions/Poem'... Cloning into '/src/repo/extensions/ReplaceText'... Cloning into '/src/repo/extensions/Scribunto'... Cloning into '/src/repo/extensions/SecureLinkFixer'... Cloning into '/src/repo/extensions/SpamBlacklist'... Cloning into '/src/repo/extensions/SyntaxHighlight_GeSHi'... Cloning into '/src/repo/extensions/TemplateData'... Cloning into '/src/repo/extensions/TemplateStyles'... Cloning into '/src/repo/extensions/TextExtracts'... Cloning into '/src/repo/extensions/Thanks'... Cloning into '/src/repo/extensions/TitleBlacklist'... Cloning into '/src/repo/extensions/VisualEditor'... Cloning into '/src/repo/extensions/WikiEditor'... Cloning into '/src/repo/skins/MinervaNeue'... Cloning into '/src/repo/skins/MonoBook'... Cloning into '/src/repo/skins/Timeless'... Cloning into '/src/repo/skins/Vector'... Cloning into '/src/repo/vendor'... --- stdout --- Submodule path 'extensions/AbuseFilter': checked out '103b15f8c680a7da3320bcd74bdb30f4af909dd5' Submodule path 'extensions/CategoryTree': checked out '597dd0f27f2d3a1b8ef7b4424f3847b6d7a88453' Submodule path 'extensions/CheckUser': checked out 'f5edd76722a2d7e8e22f4abbfd40f1c34ed68774' Submodule path 'extensions/Cite': checked out 'a09c3f0e521bfb30cedf96d0f148c1e839c74333' Submodule path 'extensions/CiteThisPage': checked out '62c51e04ab965f7f31953a713deaa1005e9a8a74' Submodule path 'extensions/CodeEditor': checked out '9d057de38cc983e842d63edfa6313c4328a2356a' Submodule path 'extensions/ConfirmEdit': checked out '6c00b703865703aa6b81e75f01f7a236d619cfda' Submodule path 'extensions/DiscussionTools': checked out '0932034579a2825381ed7b20c7ad3df1079de82b' Submodule path 'extensions/Echo': checked out '745af5aad2085ae1d6d0a0aa2f94892e187b8111' Submodule path 'extensions/Gadgets': checked out '5c605645f3dc441608ebab58c78e12a22b9a0db6' Submodule path 'extensions/ImageMap': checked out '3c86fae682dd3b735e82946a7c3fb37eedca89c2' Submodule path 'extensions/InputBox': checked out 'c136a4f5b583d00b03caa9029065ceb32c763383' Submodule path 'extensions/Interwiki': checked out 'b6c0e35bcc3dbf967c2d70f53b3e0850b12aad8e' Submodule path 'extensions/Linter': checked out 'c907dd636f2f21d372d3db9353a08cdad08868a1' Submodule path 'extensions/LoginNotify': checked out '6b694974f42473d66257ef38bf21dfc814eaa0d4' Submodule path 'extensions/Math': checked out '1fa57dc3b5f1c9e7110c9b8047cebcc0ecdce615' Submodule path 'extensions/MultimediaViewer': checked out '7cd8dcd3baf2c822e045d8101fda408f6d0748c7' Submodule path 'extensions/Nuke': checked out '03757efa28041e07567f257b8b66924e2d84fb19' Submodule path 'extensions/OATHAuth': checked out 'f436664a4a6ba1cbc8cc0d853e6483911d1c5969' Submodule path 'extensions/PageImages': checked out '90d5ae302f0071fb21209d19d42b736756dec637' Submodule path 'extensions/ParserFunctions': checked out '1c93e53ebc83f572200f6a91c2e5d848167e5a6d' Submodule path 'extensions/PdfHandler': checked out '80b9eee49e30ac8f7d2dd3d048deee93554d1cee' Submodule path 'extensions/Poem': checked out '72f1429d36529bee4d6f88d669ded09da0114660' Submodule path 'extensions/ReplaceText': checked out 'ac1c10d754d3a77004bb63911fc7893b4a1db94e' Submodule path 'extensions/Scribunto': checked out '67d3f5c31fa7c96cfa0713675ef59df51d04db11' Submodule path 'extensions/SecureLinkFixer': checked out 'b6699e0eabb1ab4c4dcdb068ec68c446cf7e1538' Submodule path 'extensions/SpamBlacklist': checked out '1d8eef48f492074e7ca2e086d26de7011a5a75f2' Submodule path 'extensions/SyntaxHighlight_GeSHi': checked out 'ee44dc033210480ca9d90b47cb1e3752a63ba668' Submodule path 'extensions/TemplateData': checked out 'f389950791edf7341768f5bca105d13ead39c442' Submodule path 'extensions/TemplateStyles': checked out '59c2918f358584eeef85a96811304e5ae9de80d4' Submodule path 'extensions/TextExtracts': checked out 'a9120c0c24e8244e3a63b605f041631f16565ca5' Submodule path 'extensions/Thanks': checked out '6cecbb69a8b6d7b9e8f6d71613c9ff63328fe2c6' Submodule path 'extensions/TitleBlacklist': checked out '8198ad12ed15b7a1ee6cf48307a639ff3418dd52' Submodule path 'extensions/VisualEditor': checked out 'ae3bd624bec1dd24db75e523f2f7e7afd4865557' Submodule path 'extensions/WikiEditor': checked out 'c068f44c71de3059211f7d6bcbf762c03b1588b8' Submodule path 'skins/MinervaNeue': checked out 'bc44b0270a11d62d55ffe39abd165087cb6417f6' Submodule path 'skins/MonoBook': checked out '27cb1aa0cf877b63eaf6745e895139c86c741c5b' Submodule path 'skins/Timeless': checked out '0f88493f64908f4cd014189183c2641c3625d26a' Submodule path 'skins/Vector': checked out 'c427724f7a2b66a5542f978505577012f539370b' Submodule path 'vendor': checked out 'fe3afb1f41047865bfe2463038d8d2ce9b2a8e43' --- end --- $ grr init --- stdout --- Installed commit-msg hook. --- end --- $ git show-ref refs/heads/REL1_44 --- stdout --- 139e562cec4b9516068f7283e510ce919688ec41 refs/heads/REL1_44 --- end --- $ /usr/bin/npm audit --json --- stdout --- { "auditReportVersion": 2, "vulnerabilities": { "@wdio/cli": { "name": "@wdio/cli", "severity": "high", "isDirect": true, "via": [ "inquirer", "webdriverio", "yarn-install" ], "effects": [ "@wdio/junit-reporter", "@wdio/local-runner", "@wdio/spec-reporter" ], "range": "<=9.0.0-alpha.426", "nodes": [ "node_modules/@wdio/cli" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/junit-reporter": { "name": "@wdio/junit-reporter", "severity": "high", "isDirect": true, "via": [ "@wdio/cli" ], "effects": [], "range": "6.0.4 - 8.0.0-alpha.631", "nodes": [ "node_modules/@wdio/junit-reporter" ], "fixAvailable": { "name": "@wdio/junit-reporter", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/local-runner": { "name": "@wdio/local-runner", "severity": "high", "isDirect": true, "via": [ "@wdio/cli", "@wdio/runner" ], "effects": [], "range": "6.0.4 - 8.46.0", "nodes": [ "node_modules/@wdio/local-runner" ], "fixAvailable": { "name": "@wdio/local-runner", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/runner": { "name": "@wdio/runner", "severity": "high", "isDirect": false, "via": [ "webdriverio" ], "effects": [ "@wdio/local-runner" ], "range": "7.16.5 - 8.46.0", "nodes": [ "node_modules/@wdio/runner" ], "fixAvailable": { "name": "@wdio/local-runner", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/spec-reporter": { "name": "@wdio/spec-reporter", "severity": "high", "isDirect": true, "via": [ "@wdio/cli" ], "effects": [], "range": "6.0.4 - 8.0.0-alpha.631", "nodes": [ "node_modules/@wdio/spec-reporter" ], "fixAvailable": { "name": "@wdio/spec-reporter", "version": "9.20.0", "isSemVerMajor": true } }, "axios": { "name": "axios", "severity": "high", "isDirect": false, "via": [ { "source": 1097679, "name": "axios", "dependency": "axios", "title": "Axios Cross-Site Request Forgery Vulnerability", "url": "https://github.com/advisories/GHSA-wf5p-g6vw-rhxx", "severity": "moderate", "cwe": [ "CWE-352" ], "cvss": { "score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N" }, "range": ">=0.8.1 <0.28.0" }, { "source": 1103617, "name": "axios", "dependency": "axios", "title": "axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL", "url": "https://github.com/advisories/GHSA-jr5f-v2jv-69x6", "severity": "high", "cwe": [ "CWE-918" ], "cvss": { "score": 0, "vectorString": null }, "range": "<0.30.0" }, { "source": 1107599, "name": "axios", "dependency": "axios", "title": "Axios is vulnerable to DoS attack through lack of data size check", "url": "https://github.com/advisories/GHSA-4hjh-wcwx-xvwj", "severity": "high", "cwe": [ "CWE-770" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H" }, "range": "<1.12.0" } ], "effects": [ "openapi-validator" ], "range": "<=1.11.0", "nodes": [ "node_modules/axios" ], "fixAvailable": { "name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true } }, "brace-expansion": { "name": "brace-expansion", "severity": "low", "isDirect": false, "via": [ { "source": 1105443, "name": "brace-expansion", "dependency": "brace-expansion", "title": "brace-expansion Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-v6h2-p8h4-qcjw", "severity": "low", "cwe": [ "CWE-400" ], "cvss": { "score": 3.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L" }, "range": ">=1.0.0 <=1.1.11" }, { "source": 1105444, "name": "brace-expansion", "dependency": "brace-expansion", "title": "brace-expansion Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-v6h2-p8h4-qcjw", "severity": "low", "cwe": [ "CWE-400" ], "cvss": { "score": 3.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L" }, "range": ">=2.0.0 <=2.0.1" } ], "effects": [], "range": "1.0.0 - 1.1.11 || 2.0.0 - 2.0.1", "nodes": [ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion", "node_modules/@wdio/config/node_modules/brace-expansion", "node_modules/brace-expansion", "node_modules/editorconfig/node_modules/brace-expansion", "node_modules/eslint-plugin-n/node_modules/brace-expansion", "node_modules/filelist/node_modules/brace-expansion", "node_modules/js-beautify/node_modules/brace-expansion", "node_modules/mocha/node_modules/brace-expansion", "node_modules/readdir-glob/node_modules/brace-expansion", "node_modules/webdriverio/node_modules/brace-expansion" ], "fixAvailable": true }, "chai-openapi-response-validator": { "name": "chai-openapi-response-validator", "severity": "high", "isDirect": true, "via": [ "openapi-validator" ], "effects": [], "range": "0.11.2 || >=0.14.2-alpha.0", "nodes": [ "node_modules/chai-openapi-response-validator" ], "fixAvailable": { "name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true } }, "cross-spawn": { "name": "cross-spawn", "severity": "high", "isDirect": false, "via": [ { "source": 1104663, "name": "cross-spawn", "dependency": "cross-spawn", "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn", "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275", "severity": "high", "cwe": [ "CWE-1333" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H" }, "range": "<6.0.6" } ], "effects": [ "yarn-install" ], "range": "<6.0.6", "nodes": [ "node_modules/yarn-install/node_modules/cross-spawn" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "devtools": { "name": "devtools", "severity": "high", "isDirect": false, "via": [ "puppeteer-core" ], "effects": [], "range": ">=7.16.5", "nodes": [ "node_modules/devtools" ], "fixAvailable": true }, "external-editor": { "name": "external-editor", "severity": "low", "isDirect": false, "via": [ "tmp" ], "effects": [ "inquirer" ], "range": ">=1.1.1", "nodes": [ "node_modules/external-editor" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "form-data": { "name": "form-data", "severity": "critical", "isDirect": false, "via": [ { "source": 1106507, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": [ "CWE-330" ], "cvss": { "score": 0, "vectorString": null }, "range": ">=4.0.0 <4.0.4" }, { "source": 1106509, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": [ "CWE-330" ], "cvss": { "score": 0, "vectorString": null }, "range": "<2.5.4" } ], "effects": [ "request" ], "range": ">=4.0.0 <4.0.4 || <2.5.4", "nodes": [ "node_modules/@types/request/node_modules/form-data", "node_modules/form-data", "node_modules/request/node_modules/form-data" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "inquirer": { "name": "inquirer", "severity": "low", "isDirect": false, "via": [ "external-editor" ], "effects": [ "@wdio/cli" ], "range": "3.0.0 - 8.2.6 || 9.0.0 - 9.3.7", "nodes": [ "node_modules/inquirer" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "mwbot": { "name": "mwbot", "severity": "moderate", "isDirect": false, "via": [ "request" ], "effects": [], "range": ">=0.1.6", "nodes": [ "node_modules/mwbot" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "openapi-validator": { "name": "openapi-validator", "severity": "high", "isDirect": false, "via": [ "axios" ], "effects": [ "chai-openapi-response-validator" ], "range": ">=0.14.2-alpha.0", "nodes": [ "node_modules/openapi-validator" ], "fixAvailable": { "name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true } }, "puppeteer-core": { "name": "puppeteer-core", "severity": "high", "isDirect": false, "via": [ "tar-fs", "ws" ], "effects": [ "devtools", "webdriverio" ], "range": "10.0.0 - 22.11.1", "nodes": [ "node_modules/devtools/node_modules/puppeteer-core", "node_modules/puppeteer-core" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "request": { "name": "request", "severity": "critical", "isDirect": false, "via": [ { "source": 1096727, "name": "request", "dependency": "request", "title": "Server-Side Request Forgery in Request", "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6", "severity": "moderate", "cwe": [ "CWE-918" ], "cvss": { "score": 6.1, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N" }, "range": "<=2.88.2" }, "form-data", "tough-cookie" ], "effects": [ "mwbot" ], "range": "*", "nodes": [ "node_modules/request" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "tar-fs": { "name": "tar-fs", "severity": "high", "isDirect": false, "via": [ { "source": 1104677, "name": "tar-fs", "dependency": "tar-fs", "title": "tar-fs Vulnerable to Link Following and Path Traversal via Extracting a Crafted tar File", "url": "https://github.com/advisories/GHSA-pq67-2wwv-3xjx", "severity": "high", "cwe": [ "CWE-22" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N" }, "range": ">=2.0.0 <2.1.2" }, { "source": 1106930, "name": "tar-fs", "dependency": "tar-fs", "title": "tar-fs can extract outside the specified dir with a specific tarball", "url": "https://github.com/advisories/GHSA-8cj5-5rvv-wf4v", "severity": "high", "cwe": [ "CWE-22" ], "cvss": { "score": 0, "vectorString": null }, "range": ">=2.0.0 <2.1.3" } ], "effects": [ "puppeteer-core" ], "range": "2.0.0 - 2.1.2", "nodes": [ "node_modules/tar-fs" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "tmp": { "name": "tmp", "severity": "low", "isDirect": false, "via": [ { "source": 1106849, "name": "tmp", "dependency": "tmp", "title": "tmp allows arbitrary temporary file / directory write via symbolic link `dir` parameter", "url": "https://github.com/advisories/GHSA-52f5-9888-hmc6", "severity": "low", "cwe": [ "CWE-59" ], "cvss": { "score": 2.5, "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N" }, "range": "<=0.2.3" } ], "effects": [ "external-editor" ], "range": "<=0.2.3", "nodes": [ "node_modules/karma/node_modules/tmp", "node_modules/tmp" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "tough-cookie": { "name": "tough-cookie", "severity": "moderate", "isDirect": false, "via": [ { "source": 1097682, "name": "tough-cookie", "dependency": "tough-cookie", "title": "tough-cookie Prototype Pollution vulnerability", "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3", "severity": "moderate", "cwe": [ "CWE-1321" ], "cvss": { "score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N" }, "range": "<4.1.3" } ], "effects": [ "request" ], "range": "<4.1.3", "nodes": [ "node_modules/tough-cookie" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "webdriverio": { "name": "webdriverio", "severity": "high", "isDirect": false, "via": [ "devtools", "puppeteer-core" ], "effects": [ "@wdio/cli", "@wdio/runner" ], "range": "7.16.5 - 8.46.0", "nodes": [ "node_modules/webdriverio" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "ws": { "name": "ws", "severity": "high", "isDirect": false, "via": [ { "source": 1098392, "name": "ws", "dependency": "ws", "title": "ws affected by a DoS when handling a request with many HTTP headers", "url": "https://github.com/advisories/GHSA-3h5v-q93c-6h6q", "severity": "high", "cwe": [ "CWE-476" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H" }, "range": ">=8.0.0 <8.17.1" } ], "effects": [ "puppeteer-core" ], "range": "8.0.0 - 8.17.0", "nodes": [ "node_modules/devtools/node_modules/ws", "node_modules/puppeteer-core/node_modules/ws" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "yarn-install": { "name": "yarn-install", "severity": "high", "isDirect": false, "via": [ "cross-spawn" ], "effects": [ "@wdio/cli" ], "range": "*", "nodes": [ "node_modules/yarn-install" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } } }, "metadata": { "vulnerabilities": { "info": 0, "low": 4, "moderate": 2, "high": 15, "critical": 2, "total": 23 }, "dependencies": { "prod": 1, "dev": 1484, "optional": 4, "peer": 1, "peerOptional": 0, "total": 1484 } } } --- end --- $ /usr/bin/composer install --- stderr --- No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information. > MediaWiki\Composer\VersionChecker::onEvent Loading composer repositories with package information Updating dependencies Lock file operations: 134 installs, 0 updates, 0 removals - Locking composer/pcre (3.3.2) - Locking composer/semver (3.4.3) - Locking composer/spdx-licenses (1.5.8) - Locking composer/xdebug-handler (3.0.5) - Locking cssjanus/cssjanus (v2.3.0) - Locking dealerdirect/phpcodesniffer-composer-installer (v1.1.2) - Locking doctrine/cache (2.2.0) - Locking doctrine/dbal (3.9.4) - Locking doctrine/deprecations (1.1.5) - Locking doctrine/event-manager (2.0.1) - Locking doctrine/instantiator (2.0.0) - Locking doctrine/sql-formatter (1.3.0) - Locking felixfbecker/advanced-json-rpc (v3.2.1) - Locking giorgiosironi/eris (0.14.1) - Locking guzzlehttp/guzzle (7.9.3) - Locking guzzlehttp/promises (2.3.0) - Locking guzzlehttp/psr7 (2.8.0) - Locking hamcrest/hamcrest-php (v2.1.1) - Locking johnkary/phpunit-speedtrap (v4.0.1) - Locking justinrainbow/json-schema (5.3.0) - Locking liuggio/statsd-php-client (v1.0.18) - Locking mck89/peast (v1.17.0) - Locking mediawiki/mediawiki-codesniffer (v46.0.0) - Locking mediawiki/mediawiki-phan-config (0.15.1) - Locking mediawiki/minus-x (1.1.3) - Locking mediawiki/phan-taint-check-plugin (6.1.0) - Locking microsoft/tolerant-php-parser (v0.1.2) - Locking monolog/monolog (2.9.3) - Locking myclabs/deep-copy (1.13.4) - Locking netresearch/jsonmapper (v4.5.0) - Locking nikic/php-parser (v5.6.1) - Locking oojs/oojs-ui (v0.51.7) - Locking pear/console_getopt (v1.4.3) - Locking pear/mail (v2.0.0) - Locking pear/mail_mime (1.10.12) - Locking pear/net_smtp (1.12.1) - Locking pear/net_socket (v1.2.2) - Locking pear/net_url2 (v2.2.3) - Locking pear/pear-core-minimal (v1.10.16) - Locking pear/pear_exception (v1.0.2) - Locking phan/phan (5.4.5) - Locking phar-io/manifest (2.0.4) - Locking phar-io/version (3.2.1) - Locking php-parallel-lint/php-console-color (v1.0.1) - Locking php-parallel-lint/php-console-highlighter (v1.0.0) - Locking php-parallel-lint/php-parallel-lint (v1.4.0) - Locking phpcsstandards/phpcsextra (1.2.1) - Locking phpcsstandards/phpcsutils (1.0.12) - Locking phpdocumentor/reflection-common (2.2.0) - Locking phpdocumentor/reflection-docblock (5.6.3) - Locking phpdocumentor/type-resolver (1.10.0) - Locking phpstan/phpdoc-parser (2.3.0) - Locking phpunit/php-code-coverage (9.2.32) - Locking phpunit/php-file-iterator (3.0.6) - Locking phpunit/php-invoker (3.1.1) - Locking phpunit/php-text-template (2.0.4) - Locking phpunit/php-timer (5.0.3) - Locking phpunit/phpunit (9.6.21) - Locking psr/cache (3.0.0) - Locking psr/container (1.1.2) - Locking psr/http-client (1.0.3) - Locking psr/http-factory (1.1.0) - Locking psr/http-message (1.1) - Locking psr/log (1.1.4) - Locking psy/psysh (v0.12.12) - Locking ralouphie/getallheaders (3.0.3) - Locking sabre/event (5.1.7) - Locking sebastian/cli-parser (1.0.2) - Locking sebastian/code-unit (1.0.8) - Locking sebastian/code-unit-reverse-lookup (2.0.3) - Locking sebastian/comparator (4.0.9) - Locking sebastian/complexity (2.0.3) - Locking sebastian/diff (4.0.6) - Locking sebastian/environment (5.1.5) - Locking sebastian/exporter (4.0.8) - Locking sebastian/global-state (5.0.8) - Locking sebastian/lines-of-code (1.0.4) - Locking sebastian/object-enumerator (4.0.4) - Locking sebastian/object-reflector (2.0.4) - Locking sebastian/recursion-context (4.0.6) - Locking sebastian/resource-operations (3.0.4) - Locking sebastian/type (3.2.1) - Locking sebastian/version (3.0.2) - Locking seld/jsonlint (1.11.0) - Locking squizlabs/php_codesniffer (3.11.3) - Locking symfony/console (v7.3.4) - Locking symfony/deprecation-contracts (v3.6.0) - Locking symfony/polyfill-php82 (v1.32.0) - Locking symfony/polyfill-php83 (v1.32.0) - Locking symfony/service-contracts (v3.6.0) - Locking symfony/string (v7.3.4) - Locking symfony/var-dumper (v7.3.4) - Locking symfony/yaml (v5.4.45) - Locking theseer/tokenizer (1.2.3) - Locking tysonandre/var_representation_polyfill (0.1.3) - Locking webmozart/assert (1.11.0) - Locking wikimedia/alea (1.0.0) - Locking wikimedia/assert (v0.5.1) - Locking wikimedia/at-ease (v3.0.0) - Locking wikimedia/base-convert (v2.0.2) - Locking wikimedia/bcp-47-code (v2.0.1) - Locking wikimedia/cdb (3.0.0) - Locking wikimedia/cldr-plural-rule-parser (v2.0.0) - Locking wikimedia/common-passwords (v0.5.1) - Locking wikimedia/composer-merge-plugin (v2.1.0) - Locking wikimedia/html-formatter (4.1.0) - Locking wikimedia/idle-dom (v2.0.1) - Locking wikimedia/ip-utils (5.0.0) - Locking wikimedia/json-codec (v3.0.3) - Locking wikimedia/langconv (0.5.0) - Locking wikimedia/less.php (v5.2.1) - Locking wikimedia/minify (2.9.0) - Locking wikimedia/normalized-exception (v2.1.1) - Locking wikimedia/object-factory (v5.0.1) - Locking wikimedia/parsoid (v0.21.0) - Locking wikimedia/php-session-serializer (3.0.1) - Locking wikimedia/purtle (v2.0.0) - Locking wikimedia/relpath (4.0.2) - Locking wikimedia/remex-html (4.1.2) - Locking wikimedia/request-timeout (v2.0.2) - Locking wikimedia/running-stat (v2.1.0) - Locking wikimedia/scoped-callback (v5.0.0) - Locking wikimedia/services (4.0.0) - Locking wikimedia/shellbox (4.2.0) - Locking wikimedia/testing-access-wrapper (3.0.0) - Locking wikimedia/timestamp (v4.2.0) - Locking wikimedia/utfnormal (4.0.0) - Locking wikimedia/wait-condition-loop (v2.0.2) - Locking wikimedia/wikipeg (4.0.2) - Locking wikimedia/wrappedstring (v4.0.1) - Locking wikimedia/xmp-reader (0.9.4) - Locking wikimedia/zest-css (3.0.4) - Locking wmde/hamcrest-html-matchers (v1.1.0) - Locking zordius/lightncandy (v1.2.6) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 72 installs, 4 updates, 8 removals - Downloading doctrine/dbal (3.9.4) - Downloading doctrine/sql-formatter (1.3.0) - Downloading wikimedia/langconv (0.5.0) 0/3 [>---------------------------] 0% 1/3 [=========>------------------] 33% 2/3 [==================>---------] 66% 3/3 [============================] 100% - Removing wikimedia/equivset (1.7.1) - Removing wikimedia/css-sanitizer (v5.5.0) - Removing jakobo/hotp-php (v2.0.0) - Removing firebase/php-jwt (v6.10.0) - Removing endroid/qr-code (5.1.0) - Removing dasprid/enum (1.0.6) - Removing christian-riesen/base32 (1.6.0) - Removing bacon/bacon-qr-code (v3.0.1) - Installing squizlabs/php_codesniffer (3.11.3): Extracting archive 0/1 [>---------------------------] 0% 1/1 [============================] 100% - Installing dealerdirect/phpcodesniffer-composer-installer (v1.1.2): Extracting archive - Installing composer/pcre (3.3.2): Extracting archive - Installing psr/cache (3.0.0): Extracting archive - Installing doctrine/event-manager (2.0.1): Extracting archive - Installing doctrine/deprecations (1.1.5): Extracting archive - Installing doctrine/cache (2.2.0): Extracting archive - Installing doctrine/dbal (3.9.4): Extracting archive - Installing doctrine/sql-formatter (1.3.0): Extracting archive - Installing giorgiosironi/eris (0.14.1): Extracting archive - Upgrading guzzlehttp/promises (2.0.4 => 2.3.0): Extracting archive - Upgrading guzzlehttp/psr7 (2.7.0 => 2.8.0): Extracting archive - Installing sebastian/version (3.0.2): Extracting archive - Installing sebastian/type (3.2.1): Extracting archive - Installing sebastian/resource-operations (3.0.4): Extracting archive - Installing sebastian/recursion-context (4.0.6): Extracting archive - Installing sebastian/object-reflector (2.0.4): Extracting archive - Installing sebastian/object-enumerator (4.0.4): Extracting archive - Installing sebastian/global-state (5.0.8): Extracting archive - Installing sebastian/exporter (4.0.8): Extracting archive - Installing sebastian/environment (5.1.5): Extracting archive - Installing sebastian/diff (4.0.6): Extracting archive - Installing sebastian/comparator (4.0.9): Extracting archive - Installing sebastian/code-unit (1.0.8): Extracting archive - Installing sebastian/cli-parser (1.0.2): Extracting archive - Installing phpunit/php-timer (5.0.3): Extracting archive - Installing phpunit/php-text-template (2.0.4): Extracting archive - Installing phpunit/php-invoker (3.1.1): Extracting archive - Installing phpunit/php-file-iterator (3.0.6): Extracting archive - Installing theseer/tokenizer (1.2.3): Extracting archive - Installing nikic/php-parser (v5.6.1): Extracting archive - Installing sebastian/lines-of-code (1.0.4): Extracting archive - Installing sebastian/complexity (2.0.3): Extracting archive - Installing sebastian/code-unit-reverse-lookup (2.0.3): Extracting archive - Installing phpunit/php-code-coverage (9.2.32): Extracting archive - Installing phar-io/version (3.2.1): Extracting archive - Installing phar-io/manifest (2.0.4): Extracting archive - Installing myclabs/deep-copy (1.13.4): Extracting archive - Installing doctrine/instantiator (2.0.0): Extracting archive - Installing phpunit/phpunit (9.6.21): Extracting archive - Installing johnkary/phpunit-speedtrap (v4.0.1): Extracting archive - Installing phpcsstandards/phpcsutils (1.0.12): Extracting archive - Installing phpcsstandards/phpcsextra (1.2.1): Extracting archive - Installing composer/spdx-licenses (1.5.8): Extracting archive - Installing mediawiki/mediawiki-codesniffer (v46.0.0): Extracting archive - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive - Installing symfony/string (v7.3.4): Extracting archive - Upgrading symfony/deprecation-contracts (v2.5.4 => v3.6.0): Extracting archive - Installing symfony/service-contracts (v3.6.0): Extracting archive - Installing symfony/console (v7.3.4): Extracting archive - Installing sabre/event (5.1.7): Extracting archive - Installing netresearch/jsonmapper (v4.5.0): Extracting archive - Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive - Installing webmozart/assert (1.11.0): Extracting archive - Installing phpstan/phpdoc-parser (2.3.0): Extracting archive - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive - Installing phpdocumentor/type-resolver (1.10.0): Extracting archive - Installing phpdocumentor/reflection-docblock (5.6.3): Extracting archive - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive - Installing composer/xdebug-handler (3.0.5): Extracting archive - Installing phan/phan (5.4.5): Extracting archive - Installing mediawiki/phan-taint-check-plugin (6.1.0): Extracting archive - Installing mediawiki/mediawiki-phan-config (0.15.1): Extracting archive - Installing mediawiki/minus-x (1.1.3): Extracting archive - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive - Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive - Installing symfony/var-dumper (v7.3.4): Extracting archive - Installing psy/psysh (v0.12.12): Extracting archive - Installing seld/jsonlint (1.11.0): Extracting archive - Installing wikimedia/alea (1.0.0): Extracting archive - Installing wikimedia/langconv (0.5.0): Extracting archive - Upgrading wikimedia/zest-css (3.0.2 => 3.0.4): Extracting archive - Installing wikimedia/testing-access-wrapper (3.0.0): Extracting archive - Installing hamcrest/hamcrest-php (v2.1.1): Extracting archive - Installing wmde/hamcrest-html-matchers (v1.1.0): Extracting archive 0/74 [>---------------------------] 0% 20/74 [=======>--------------------] 27% 35/74 [=============>--------------] 47% 45/74 [=================>----------] 60% 55/74 [====================>-------] 74% 64/74 [========================>---] 86% 73/74 [===========================>] 98% 74/74 [============================] 100% 21 package suggestions were added by new dependencies, use `composer suggest` to see details. Package cssjanus/cssjanus is abandoned, you should avoid using it. Use wikimedia/cssjanus instead. Generating optimized autoload files 50 packages you are using are looking for funding. Use the `composer fund` command to find out more! > MediaWiki\Composer\ComposerVendorHtaccessCreator::onEvent --- stdout --- PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils --- end --- $ /usr/bin/npm audit --json --- stdout --- { "auditReportVersion": 2, "vulnerabilities": { "@wdio/cli": { "name": "@wdio/cli", "severity": "high", "isDirect": true, "via": [ "inquirer", "webdriverio", "yarn-install" ], "effects": [ "@wdio/junit-reporter", "@wdio/local-runner", "@wdio/spec-reporter" ], "range": "<=9.0.0-alpha.426", "nodes": [ "node_modules/@wdio/cli" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/junit-reporter": { "name": "@wdio/junit-reporter", "severity": "high", "isDirect": true, "via": [ "@wdio/cli" ], "effects": [], "range": "6.0.4 - 8.0.0-alpha.631", "nodes": [ "node_modules/@wdio/junit-reporter" ], "fixAvailable": { "name": "@wdio/junit-reporter", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/local-runner": { "name": "@wdio/local-runner", "severity": "high", "isDirect": true, "via": [ "@wdio/cli", "@wdio/runner" ], "effects": [], "range": "6.0.4 - 8.46.0", "nodes": [ "node_modules/@wdio/local-runner" ], "fixAvailable": { "name": "@wdio/local-runner", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/runner": { "name": "@wdio/runner", "severity": "high", "isDirect": false, "via": [ "webdriverio" ], "effects": [ "@wdio/local-runner" ], "range": "7.16.5 - 8.46.0", "nodes": [ "node_modules/@wdio/runner" ], "fixAvailable": { "name": "@wdio/local-runner", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/spec-reporter": { "name": "@wdio/spec-reporter", "severity": "high", "isDirect": true, "via": [ "@wdio/cli" ], "effects": [], "range": "6.0.4 - 8.0.0-alpha.631", "nodes": [ "node_modules/@wdio/spec-reporter" ], "fixAvailable": { "name": "@wdio/spec-reporter", "version": "9.20.0", "isSemVerMajor": true } }, "axios": { "name": "axios", "severity": "high", "isDirect": false, "via": [ { "source": 1097679, "name": "axios", "dependency": "axios", "title": "Axios Cross-Site Request Forgery Vulnerability", "url": "https://github.com/advisories/GHSA-wf5p-g6vw-rhxx", "severity": "moderate", "cwe": [ "CWE-352" ], "cvss": { "score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N" }, "range": ">=0.8.1 <0.28.0" }, { "source": 1103617, "name": "axios", "dependency": "axios", "title": "axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL", "url": "https://github.com/advisories/GHSA-jr5f-v2jv-69x6", "severity": "high", "cwe": [ "CWE-918" ], "cvss": { "score": 0, "vectorString": null }, "range": "<0.30.0" }, { "source": 1107599, "name": "axios", "dependency": "axios", "title": "Axios is vulnerable to DoS attack through lack of data size check", "url": "https://github.com/advisories/GHSA-4hjh-wcwx-xvwj", "severity": "high", "cwe": [ "CWE-770" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H" }, "range": "<1.12.0" } ], "effects": [ "openapi-validator" ], "range": "<=1.11.0", "nodes": [ "node_modules/axios" ], "fixAvailable": { "name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true } }, "brace-expansion": { "name": "brace-expansion", "severity": "low", "isDirect": false, "via": [ { "source": 1105443, "name": "brace-expansion", "dependency": "brace-expansion", "title": "brace-expansion Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-v6h2-p8h4-qcjw", "severity": "low", "cwe": [ "CWE-400" ], "cvss": { "score": 3.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L" }, "range": ">=1.0.0 <=1.1.11" }, { "source": 1105444, "name": "brace-expansion", "dependency": "brace-expansion", "title": "brace-expansion Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-v6h2-p8h4-qcjw", "severity": "low", "cwe": [ "CWE-400" ], "cvss": { "score": 3.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L" }, "range": ">=2.0.0 <=2.0.1" } ], "effects": [], "range": "1.0.0 - 1.1.11 || 2.0.0 - 2.0.1", "nodes": [ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion", "node_modules/@wdio/config/node_modules/brace-expansion", "node_modules/brace-expansion", "node_modules/editorconfig/node_modules/brace-expansion", "node_modules/eslint-plugin-n/node_modules/brace-expansion", "node_modules/filelist/node_modules/brace-expansion", "node_modules/js-beautify/node_modules/brace-expansion", "node_modules/mocha/node_modules/brace-expansion", "node_modules/readdir-glob/node_modules/brace-expansion", "node_modules/webdriverio/node_modules/brace-expansion" ], "fixAvailable": true }, "chai-openapi-response-validator": { "name": "chai-openapi-response-validator", "severity": "high", "isDirect": true, "via": [ "openapi-validator" ], "effects": [], "range": "0.11.2 || >=0.14.2-alpha.0", "nodes": [ "node_modules/chai-openapi-response-validator" ], "fixAvailable": { "name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true } }, "cross-spawn": { "name": "cross-spawn", "severity": "high", "isDirect": false, "via": [ { "source": 1104663, "name": "cross-spawn", "dependency": "cross-spawn", "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn", "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275", "severity": "high", "cwe": [ "CWE-1333" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H" }, "range": "<6.0.6" } ], "effects": [ "yarn-install" ], "range": "<6.0.6", "nodes": [ "node_modules/yarn-install/node_modules/cross-spawn" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "devtools": { "name": "devtools", "severity": "high", "isDirect": false, "via": [ "puppeteer-core" ], "effects": [], "range": ">=7.16.5", "nodes": [ "node_modules/devtools" ], "fixAvailable": true }, "external-editor": { "name": "external-editor", "severity": "low", "isDirect": false, "via": [ "tmp" ], "effects": [ "inquirer" ], "range": ">=1.1.1", "nodes": [ "node_modules/external-editor" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "form-data": { "name": "form-data", "severity": "critical", "isDirect": false, "via": [ { "source": 1106507, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": [ "CWE-330" ], "cvss": { "score": 0, "vectorString": null }, "range": ">=4.0.0 <4.0.4" }, { "source": 1106509, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": [ "CWE-330" ], "cvss": { "score": 0, "vectorString": null }, "range": "<2.5.4" } ], "effects": [ "request" ], "range": ">=4.0.0 <4.0.4 || <2.5.4", "nodes": [ "node_modules/@types/request/node_modules/form-data", "node_modules/form-data", "node_modules/request/node_modules/form-data" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "inquirer": { "name": "inquirer", "severity": "low", "isDirect": false, "via": [ "external-editor" ], "effects": [ "@wdio/cli" ], "range": "3.0.0 - 8.2.6 || 9.0.0 - 9.3.7", "nodes": [ "node_modules/inquirer" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "mwbot": { "name": "mwbot", "severity": "moderate", "isDirect": false, "via": [ "request" ], "effects": [], "range": ">=0.1.6", "nodes": [ "node_modules/mwbot" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "openapi-validator": { "name": "openapi-validator", "severity": "high", "isDirect": false, "via": [ "axios" ], "effects": [ "chai-openapi-response-validator" ], "range": ">=0.14.2-alpha.0", "nodes": [ "node_modules/openapi-validator" ], "fixAvailable": { "name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true } }, "puppeteer-core": { "name": "puppeteer-core", "severity": "high", "isDirect": false, "via": [ "tar-fs", "ws" ], "effects": [ "devtools", "webdriverio" ], "range": "10.0.0 - 22.11.1", "nodes": [ "node_modules/devtools/node_modules/puppeteer-core", "node_modules/puppeteer-core" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "request": { "name": "request", "severity": "critical", "isDirect": false, "via": [ { "source": 1096727, "name": "request", "dependency": "request", "title": "Server-Side Request Forgery in Request", "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6", "severity": "moderate", "cwe": [ "CWE-918" ], "cvss": { "score": 6.1, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N" }, "range": "<=2.88.2" }, "form-data", "tough-cookie" ], "effects": [ "mwbot" ], "range": "*", "nodes": [ "node_modules/request" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "tar-fs": { "name": "tar-fs", "severity": "high", "isDirect": false, "via": [ { "source": 1104677, "name": "tar-fs", "dependency": "tar-fs", "title": "tar-fs Vulnerable to Link Following and Path Traversal via Extracting a Crafted tar File", "url": "https://github.com/advisories/GHSA-pq67-2wwv-3xjx", "severity": "high", "cwe": [ "CWE-22" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N" }, "range": ">=2.0.0 <2.1.2" }, { "source": 1106930, "name": "tar-fs", "dependency": "tar-fs", "title": "tar-fs can extract outside the specified dir with a specific tarball", "url": "https://github.com/advisories/GHSA-8cj5-5rvv-wf4v", "severity": "high", "cwe": [ "CWE-22" ], "cvss": { "score": 0, "vectorString": null }, "range": ">=2.0.0 <2.1.3" } ], "effects": [ "puppeteer-core" ], "range": "2.0.0 - 2.1.2", "nodes": [ "node_modules/tar-fs" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "tmp": { "name": "tmp", "severity": "low", "isDirect": false, "via": [ { "source": 1106849, "name": "tmp", "dependency": "tmp", "title": "tmp allows arbitrary temporary file / directory write via symbolic link `dir` parameter", "url": "https://github.com/advisories/GHSA-52f5-9888-hmc6", "severity": "low", "cwe": [ "CWE-59" ], "cvss": { "score": 2.5, "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N" }, "range": "<=0.2.3" } ], "effects": [ "external-editor" ], "range": "<=0.2.3", "nodes": [ "node_modules/karma/node_modules/tmp", "node_modules/tmp" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "tough-cookie": { "name": "tough-cookie", "severity": "moderate", "isDirect": false, "via": [ { "source": 1097682, "name": "tough-cookie", "dependency": "tough-cookie", "title": "tough-cookie Prototype Pollution vulnerability", "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3", "severity": "moderate", "cwe": [ "CWE-1321" ], "cvss": { "score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N" }, "range": "<4.1.3" } ], "effects": [ "request" ], "range": "<4.1.3", "nodes": [ "node_modules/tough-cookie" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "webdriverio": { "name": "webdriverio", "severity": "high", "isDirect": false, "via": [ "devtools", "puppeteer-core" ], "effects": [ "@wdio/cli", "@wdio/runner" ], "range": "7.16.5 - 8.46.0", "nodes": [ "node_modules/webdriverio" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "ws": { "name": "ws", "severity": "high", "isDirect": false, "via": [ { "source": 1098392, "name": "ws", "dependency": "ws", "title": "ws affected by a DoS when handling a request with many HTTP headers", "url": "https://github.com/advisories/GHSA-3h5v-q93c-6h6q", "severity": "high", "cwe": [ "CWE-476" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H" }, "range": ">=8.0.0 <8.17.1" } ], "effects": [ "puppeteer-core" ], "range": "8.0.0 - 8.17.0", "nodes": [ "node_modules/devtools/node_modules/ws", "node_modules/puppeteer-core/node_modules/ws" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "yarn-install": { "name": "yarn-install", "severity": "high", "isDirect": false, "via": [ "cross-spawn" ], "effects": [ "@wdio/cli" ], "range": "*", "nodes": [ "node_modules/yarn-install" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } } }, "metadata": { "vulnerabilities": { "info": 0, "low": 4, "moderate": 2, "high": 15, "critical": 2, "total": 23 }, "dependencies": { "prod": 1, "dev": 1484, "optional": 4, "peer": 1, "peerOptional": 0, "total": 1484 } } } --- end --- Attempting to npm audit fix $ /usr/bin/npm audit fix --dry-run --only=dev --json --- stderr --- npm WARN invalid config only="dev" set in command line options npm WARN invalid config Must be one of: null, prod, production npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: '@wikimedia/codex@1.23.0', npm WARN EBADENGINE required: { node: '>=20', npm: '>=10.8.1' }, npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' } npm WARN EBADENGINE } npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: '@wikimedia/codex-icons@1.23.0', npm WARN EBADENGINE required: { node: '>=20', npm: '>=10.8.1' }, npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' } npm WARN EBADENGINE } --- stdout --- { "added": 1483, "removed": 0, "changed": 0, "audited": 1484, "funding": 168, "audit": { "auditReportVersion": 2, "vulnerabilities": { "@wdio/cli": { "name": "@wdio/cli", "severity": "high", "isDirect": true, "via": [ "inquirer", "webdriverio", "yarn-install" ], "effects": [ "@wdio/junit-reporter", "@wdio/local-runner", "@wdio/spec-reporter" ], "range": "<=9.0.0-alpha.426", "nodes": [ "node_modules/@wdio/cli" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/junit-reporter": { "name": "@wdio/junit-reporter", "severity": "high", "isDirect": true, "via": [ "@wdio/cli" ], "effects": [], "range": "6.0.4 - 8.0.0-alpha.631", "nodes": [ "node_modules/@wdio/junit-reporter" ], "fixAvailable": { "name": "@wdio/junit-reporter", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/local-runner": { "name": "@wdio/local-runner", "severity": "high", "isDirect": true, "via": [ "@wdio/cli", "@wdio/runner" ], "effects": [], "range": "6.0.4 - 8.46.0", "nodes": [ "node_modules/@wdio/local-runner" ], "fixAvailable": { "name": "@wdio/local-runner", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/runner": { "name": "@wdio/runner", "severity": "high", "isDirect": false, "via": [ "webdriverio" ], "effects": [ "@wdio/local-runner" ], "range": "7.16.5 - 8.46.0", "nodes": [ "node_modules/@wdio/runner" ], "fixAvailable": { "name": "@wdio/local-runner", "version": "9.20.0", "isSemVerMajor": true } }, "@wdio/spec-reporter": { "name": "@wdio/spec-reporter", "severity": "high", "isDirect": true, "via": [ "@wdio/cli" ], "effects": [], "range": "6.0.4 - 8.0.0-alpha.631", "nodes": [ "node_modules/@wdio/spec-reporter" ], "fixAvailable": { "name": "@wdio/spec-reporter", "version": "9.20.0", "isSemVerMajor": true } }, "axios": { "name": "axios", "severity": "high", "isDirect": false, "via": [ { "source": 1097679, "name": "axios", "dependency": "axios", "title": "Axios Cross-Site Request Forgery Vulnerability", "url": "https://github.com/advisories/GHSA-wf5p-g6vw-rhxx", "severity": "moderate", "cwe": [ "CWE-352" ], "cvss": { "score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N" }, "range": ">=0.8.1 <0.28.0" }, { "source": 1103617, "name": "axios", "dependency": "axios", "title": "axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL", "url": "https://github.com/advisories/GHSA-jr5f-v2jv-69x6", "severity": "high", "cwe": [ "CWE-918" ], "cvss": { "score": 0, "vectorString": null }, "range": "<0.30.0" }, { "source": 1107599, "name": "axios", "dependency": "axios", "title": "Axios is vulnerable to DoS attack through lack of data size check", "url": "https://github.com/advisories/GHSA-4hjh-wcwx-xvwj", "severity": "high", "cwe": [ "CWE-770" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H" }, "range": "<1.12.0" } ], "effects": [ "openapi-validator" ], "range": "<=1.11.0", "nodes": [ "node_modules/axios" ], "fixAvailable": { "name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true } }, "brace-expansion": { "name": "brace-expansion", "severity": "low", "isDirect": false, "via": [ { "source": 1105443, "name": "brace-expansion", "dependency": "brace-expansion", "title": "brace-expansion Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-v6h2-p8h4-qcjw", "severity": "low", "cwe": [ "CWE-400" ], "cvss": { "score": 3.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L" }, "range": ">=1.0.0 <=1.1.11" }, { "source": 1105444, "name": "brace-expansion", "dependency": "brace-expansion", "title": "brace-expansion Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-v6h2-p8h4-qcjw", "severity": "low", "cwe": [ "CWE-400" ], "cvss": { "score": 3.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L" }, "range": ">=2.0.0 <=2.0.1" } ], "effects": [], "range": "1.0.0 - 1.1.11 || 2.0.0 - 2.0.1", "nodes": [ "", "", "", "", "", "", "", "", "", "" ], "fixAvailable": true }, "chai-openapi-response-validator": { "name": "chai-openapi-response-validator", "severity": "high", "isDirect": true, "via": [ "openapi-validator" ], "effects": [], "range": "0.11.2 || >=0.14.2-alpha.0", "nodes": [ "node_modules/chai-openapi-response-validator" ], "fixAvailable": { "name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true } }, "cross-spawn": { "name": "cross-spawn", "severity": "high", "isDirect": false, "via": [ { "source": 1104663, "name": "cross-spawn", "dependency": "cross-spawn", "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn", "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275", "severity": "high", "cwe": [ "CWE-1333" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H" }, "range": "<6.0.6" } ], "effects": [ "yarn-install" ], "range": "<6.0.6", "nodes": [ "node_modules/yarn-install/node_modules/cross-spawn" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "devtools": { "name": "devtools", "severity": "high", "isDirect": false, "via": [ "puppeteer-core" ], "effects": [], "range": ">=7.16.5", "nodes": [ "node_modules/devtools" ], "fixAvailable": true }, "external-editor": { "name": "external-editor", "severity": "low", "isDirect": false, "via": [ "tmp" ], "effects": [ "inquirer" ], "range": ">=1.1.1", "nodes": [ "node_modules/external-editor" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "form-data": { "name": "form-data", "severity": "critical", "isDirect": false, "via": [ { "source": 1106507, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": [ "CWE-330" ], "cvss": { "score": 0, "vectorString": null }, "range": ">=4.0.0 <4.0.4" }, { "source": 1106509, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": [ "CWE-330" ], "cvss": { "score": 0, "vectorString": null }, "range": "<2.5.4" } ], "effects": [ "request" ], "range": ">=4.0.0 <4.0.4 || <2.5.4", "nodes": [ "", "", "node_modules/request/node_modules/form-data" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "inquirer": { "name": "inquirer", "severity": "low", "isDirect": false, "via": [ "external-editor" ], "effects": [ "@wdio/cli" ], "range": "3.0.0 - 8.2.6 || 9.0.0 - 9.3.7", "nodes": [ "node_modules/inquirer" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "mwbot": { "name": "mwbot", "severity": "moderate", "isDirect": false, "via": [ "request" ], "effects": [], "range": ">=0.1.6", "nodes": [ "node_modules/mwbot" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "openapi-validator": { "name": "openapi-validator", "severity": "high", "isDirect": false, "via": [ "axios" ], "effects": [ "chai-openapi-response-validator" ], "range": ">=0.14.2-alpha.0", "nodes": [ "node_modules/openapi-validator" ], "fixAvailable": { "name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true } }, "puppeteer-core": { "name": "puppeteer-core", "severity": "high", "isDirect": false, "via": [ "tar-fs", "ws" ], "effects": [ "devtools", "webdriverio" ], "range": "10.0.0 - 22.11.1", "nodes": [ "node_modules/devtools/node_modules/puppeteer-core", "node_modules/puppeteer-core" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "request": { "name": "request", "severity": "critical", "isDirect": false, "via": [ { "source": 1096727, "name": "request", "dependency": "request", "title": "Server-Side Request Forgery in Request", "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6", "severity": "moderate", "cwe": [ "CWE-918" ], "cvss": { "score": 6.1, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N" }, "range": "<=2.88.2" }, "form-data", "tough-cookie" ], "effects": [ "mwbot" ], "range": "*", "nodes": [ "node_modules/request" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "tar-fs": { "name": "tar-fs", "severity": "high", "isDirect": false, "via": [ { "source": 1104677, "name": "tar-fs", "dependency": "tar-fs", "title": "tar-fs Vulnerable to Link Following and Path Traversal via Extracting a Crafted tar File", "url": "https://github.com/advisories/GHSA-pq67-2wwv-3xjx", "severity": "high", "cwe": [ "CWE-22" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N" }, "range": ">=2.0.0 <2.1.2" }, { "source": 1106930, "name": "tar-fs", "dependency": "tar-fs", "title": "tar-fs can extract outside the specified dir with a specific tarball", "url": "https://github.com/advisories/GHSA-8cj5-5rvv-wf4v", "severity": "high", "cwe": [ "CWE-22" ], "cvss": { "score": 0, "vectorString": null }, "range": ">=2.0.0 <2.1.3" } ], "effects": [ "puppeteer-core" ], "range": "2.0.0 - 2.1.2", "nodes": [ "node_modules/tar-fs" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "tmp": { "name": "tmp", "severity": "low", "isDirect": false, "via": [ { "source": 1106849, "name": "tmp", "dependency": "tmp", "title": "tmp allows arbitrary temporary file / directory write via symbolic link `dir` parameter", "url": "https://github.com/advisories/GHSA-52f5-9888-hmc6", "severity": "low", "cwe": [ "CWE-59" ], "cvss": { "score": 2.5, "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N" }, "range": "<=0.2.3" } ], "effects": [ "external-editor" ], "range": "<=0.2.3", "nodes": [ "", "node_modules/tmp" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "tough-cookie": { "name": "tough-cookie", "severity": "moderate", "isDirect": false, "via": [ { "source": 1097682, "name": "tough-cookie", "dependency": "tough-cookie", "title": "tough-cookie Prototype Pollution vulnerability", "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3", "severity": "moderate", "cwe": [ "CWE-1321" ], "cvss": { "score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N" }, "range": "<4.1.3" } ], "effects": [ "request" ], "range": "<4.1.3", "nodes": [ "node_modules/tough-cookie" ], "fixAvailable": { "name": "mwbot", "version": "0.1.5", "isSemVerMajor": true } }, "webdriverio": { "name": "webdriverio", "severity": "high", "isDirect": false, "via": [ "devtools", "puppeteer-core" ], "effects": [ "@wdio/cli", "@wdio/runner" ], "range": "7.16.5 - 8.46.0", "nodes": [ "node_modules/webdriverio" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "ws": { "name": "ws", "severity": "high", "isDirect": false, "via": [ { "source": 1098392, "name": "ws", "dependency": "ws", "title": "ws affected by a DoS when handling a request with many HTTP headers", "url": "https://github.com/advisories/GHSA-3h5v-q93c-6h6q", "severity": "high", "cwe": [ "CWE-476" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H" }, "range": ">=8.0.0 <8.17.1" } ], "effects": [ "puppeteer-core" ], "range": "8.0.0 - 8.17.0", "nodes": [ "node_modules/devtools/node_modules/ws", "node_modules/puppeteer-core/node_modules/ws" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } }, "yarn-install": { "name": "yarn-install", "severity": "high", "isDirect": false, "via": [ "cross-spawn" ], "effects": [ "@wdio/cli" ], "range": "*", "nodes": [ "node_modules/yarn-install" ], "fixAvailable": { "name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true } } }, "metadata": { "vulnerabilities": { "info": 0, "low": 4, "moderate": 2, "high": 15, "critical": 2, "total": 23 }, "dependencies": { "prod": 1, "dev": 1483, "optional": 4, "peer": 1, "peerOptional": 0, "total": 1483 } } } } --- end --- {"added": 1483, "removed": 0, "changed": 0, "audited": 1484, "funding": 168, "audit": {"auditReportVersion": 2, "vulnerabilities": {"@wdio/cli": {"name": "@wdio/cli", "severity": "high", "isDirect": true, "via": ["inquirer", "webdriverio", "yarn-install"], "effects": ["@wdio/junit-reporter", "@wdio/local-runner", "@wdio/spec-reporter"], "range": "<=9.0.0-alpha.426", "nodes": ["node_modules/@wdio/cli"], "fixAvailable": {"name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true}}, "@wdio/junit-reporter": {"name": "@wdio/junit-reporter", "severity": "high", "isDirect": true, "via": ["@wdio/cli"], "effects": [], "range": "6.0.4 - 8.0.0-alpha.631", "nodes": ["node_modules/@wdio/junit-reporter"], "fixAvailable": {"name": "@wdio/junit-reporter", "version": "9.20.0", "isSemVerMajor": true}}, "@wdio/local-runner": {"name": "@wdio/local-runner", "severity": "high", "isDirect": true, "via": ["@wdio/cli", "@wdio/runner"], "effects": [], "range": "6.0.4 - 8.46.0", "nodes": ["node_modules/@wdio/local-runner"], "fixAvailable": {"name": "@wdio/local-runner", "version": "9.20.0", "isSemVerMajor": true}}, "@wdio/runner": {"name": "@wdio/runner", "severity": "high", "isDirect": false, "via": ["webdriverio"], "effects": ["@wdio/local-runner"], "range": "7.16.5 - 8.46.0", "nodes": ["node_modules/@wdio/runner"], "fixAvailable": {"name": "@wdio/local-runner", "version": "9.20.0", "isSemVerMajor": true}}, "@wdio/spec-reporter": {"name": "@wdio/spec-reporter", "severity": "high", "isDirect": true, "via": ["@wdio/cli"], "effects": [], "range": "6.0.4 - 8.0.0-alpha.631", "nodes": ["node_modules/@wdio/spec-reporter"], "fixAvailable": {"name": "@wdio/spec-reporter", "version": "9.20.0", "isSemVerMajor": true}}, "axios": {"name": "axios", "severity": "high", "isDirect": false, "via": [{"source": 1097679, "name": "axios", "dependency": "axios", "title": "Axios Cross-Site Request Forgery Vulnerability", "url": "https://github.com/advisories/GHSA-wf5p-g6vw-rhxx", "severity": "moderate", "cwe": ["CWE-352"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N"}, "range": ">=0.8.1 <0.28.0"}, {"source": 1103617, "name": "axios", "dependency": "axios", "title": "axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL", "url": "https://github.com/advisories/GHSA-jr5f-v2jv-69x6", "severity": "high", "cwe": ["CWE-918"], "cvss": {"score": 0, "vectorString": null}, "range": "<0.30.0"}, {"source": 1107599, "name": "axios", "dependency": "axios", "title": "Axios is vulnerable to DoS attack through lack of data size check", "url": "https://github.com/advisories/GHSA-4hjh-wcwx-xvwj", "severity": "high", "cwe": ["CWE-770"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<1.12.0"}], "effects": ["openapi-validator"], "range": "<=1.11.0", "nodes": ["node_modules/axios"], "fixAvailable": {"name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true}}, "brace-expansion": {"name": "brace-expansion", "severity": "low", "isDirect": false, "via": [{"source": 1105443, "name": "brace-expansion", "dependency": "brace-expansion", "title": "brace-expansion Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-v6h2-p8h4-qcjw", "severity": "low", "cwe": ["CWE-400"], "cvss": {"score": 3.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L"}, "range": ">=1.0.0 <=1.1.11"}, {"source": 1105444, "name": "brace-expansion", "dependency": "brace-expansion", "title": "brace-expansion Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-v6h2-p8h4-qcjw", "severity": "low", "cwe": ["CWE-400"], "cvss": {"score": 3.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L"}, "range": ">=2.0.0 <=2.0.1"}], "effects": [], "range": "1.0.0 - 1.1.11 || 2.0.0 - 2.0.1", "nodes": ["", "", "", "", "", "", "", "", "", ""], "fixAvailable": true}, "chai-openapi-response-validator": {"name": "chai-openapi-response-validator", "severity": "high", "isDirect": true, "via": ["openapi-validator"], "effects": [], "range": "0.11.2 || >=0.14.2-alpha.0", "nodes": ["node_modules/chai-openapi-response-validator"], "fixAvailable": {"name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true}}, "cross-spawn": {"name": "cross-spawn", "severity": "high", "isDirect": false, "via": [{"source": 1104663, "name": "cross-spawn", "dependency": "cross-spawn", "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn", "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275", "severity": "high", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<6.0.6"}], "effects": ["yarn-install"], "range": "<6.0.6", "nodes": ["node_modules/yarn-install/node_modules/cross-spawn"], "fixAvailable": {"name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true}}, "devtools": {"name": "devtools", "severity": "high", "isDirect": false, "via": ["puppeteer-core"], "effects": [], "range": ">=7.16.5", "nodes": ["node_modules/devtools"], "fixAvailable": true}, "external-editor": {"name": "external-editor", "severity": "low", "isDirect": false, "via": ["tmp"], "effects": ["inquirer"], "range": ">=1.1.1", "nodes": ["node_modules/external-editor"], "fixAvailable": {"name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true}}, "form-data": {"name": "form-data", "severity": "critical", "isDirect": false, "via": [{"source": 1106507, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": ["CWE-330"], "cvss": {"score": 0, "vectorString": null}, "range": ">=4.0.0 <4.0.4"}, {"source": 1106509, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": ["CWE-330"], "cvss": {"score": 0, "vectorString": null}, "range": "<2.5.4"}], "effects": ["request"], "range": ">=4.0.0 <4.0.4 || <2.5.4", "nodes": ["", "", "node_modules/request/node_modules/form-data"], "fixAvailable": {"name": "mwbot", "version": "0.1.5", "isSemVerMajor": true}}, "inquirer": {"name": "inquirer", "severity": "low", "isDirect": false, "via": ["external-editor"], "effects": ["@wdio/cli"], "range": "3.0.0 - 8.2.6 || 9.0.0 - 9.3.7", "nodes": ["node_modules/inquirer"], "fixAvailable": {"name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true}}, "mwbot": {"name": "mwbot", "severity": "moderate", "isDirect": false, "via": ["request"], "effects": [], "range": ">=0.1.6", "nodes": ["node_modules/mwbot"], "fixAvailable": {"name": "mwbot", "version": "0.1.5", "isSemVerMajor": true}}, "openapi-validator": {"name": "openapi-validator", "severity": "high", "isDirect": false, "via": ["axios"], "effects": ["chai-openapi-response-validator"], "range": ">=0.14.2-alpha.0", "nodes": ["node_modules/openapi-validator"], "fixAvailable": {"name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true}}, "puppeteer-core": {"name": "puppeteer-core", "severity": "high", "isDirect": false, "via": ["tar-fs", "ws"], "effects": ["devtools", "webdriverio"], "range": "10.0.0 - 22.11.1", "nodes": ["node_modules/devtools/node_modules/puppeteer-core", "node_modules/puppeteer-core"], "fixAvailable": {"name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true}}, "request": {"name": "request", "severity": "critical", "isDirect": false, "via": [{"source": 1096727, "name": "request", "dependency": "request", "title": "Server-Side Request Forgery in Request", "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6", "severity": "moderate", "cwe": ["CWE-918"], "cvss": {"score": 6.1, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"}, "range": "<=2.88.2"}, "form-data", "tough-cookie"], "effects": ["mwbot"], "range": "*", "nodes": ["node_modules/request"], "fixAvailable": {"name": "mwbot", "version": "0.1.5", "isSemVerMajor": true}}, "tar-fs": {"name": "tar-fs", "severity": "high", "isDirect": false, "via": [{"source": 1104677, "name": "tar-fs", "dependency": "tar-fs", "title": "tar-fs Vulnerable to Link Following and Path Traversal via Extracting a Crafted tar File", "url": "https://github.com/advisories/GHSA-pq67-2wwv-3xjx", "severity": "high", "cwe": ["CWE-22"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N"}, "range": ">=2.0.0 <2.1.2"}, {"source": 1106930, "name": "tar-fs", "dependency": "tar-fs", "title": "tar-fs can extract outside the specified dir with a specific tarball", "url": "https://github.com/advisories/GHSA-8cj5-5rvv-wf4v", "severity": "high", "cwe": ["CWE-22"], "cvss": {"score": 0, "vectorString": null}, "range": ">=2.0.0 <2.1.3"}], "effects": ["puppeteer-core"], "range": "2.0.0 - 2.1.2", "nodes": ["node_modules/tar-fs"], "fixAvailable": {"name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true}}, "tmp": {"name": "tmp", "severity": "low", "isDirect": false, "via": [{"source": 1106849, "name": "tmp", "dependency": "tmp", "title": "tmp allows arbitrary temporary file / directory write via symbolic link `dir` parameter", "url": "https://github.com/advisories/GHSA-52f5-9888-hmc6", "severity": "low", "cwe": ["CWE-59"], "cvss": {"score": 2.5, "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N"}, "range": "<=0.2.3"}], "effects": ["external-editor"], "range": "<=0.2.3", "nodes": ["", "node_modules/tmp"], "fixAvailable": {"name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true}}, "tough-cookie": {"name": "tough-cookie", "severity": "moderate", "isDirect": false, "via": [{"source": 1097682, "name": "tough-cookie", "dependency": "tough-cookie", "title": "tough-cookie Prototype Pollution vulnerability", "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3", "severity": "moderate", "cwe": ["CWE-1321"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"}, "range": "<4.1.3"}], "effects": ["request"], "range": "<4.1.3", "nodes": ["node_modules/tough-cookie"], "fixAvailable": {"name": "mwbot", "version": "0.1.5", "isSemVerMajor": true}}, "webdriverio": {"name": "webdriverio", "severity": "high", "isDirect": false, "via": ["devtools", "puppeteer-core"], "effects": ["@wdio/cli", "@wdio/runner"], "range": "7.16.5 - 8.46.0", "nodes": ["node_modules/webdriverio"], "fixAvailable": {"name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true}}, "ws": {"name": "ws", "severity": "high", "isDirect": false, "via": [{"source": 1098392, "name": "ws", "dependency": "ws", "title": "ws affected by a DoS when handling a request with many HTTP headers", "url": "https://github.com/advisories/GHSA-3h5v-q93c-6h6q", "severity": "high", "cwe": ["CWE-476"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=8.0.0 <8.17.1"}], "effects": ["puppeteer-core"], "range": "8.0.0 - 8.17.0", "nodes": ["node_modules/devtools/node_modules/ws", "node_modules/puppeteer-core/node_modules/ws"], "fixAvailable": {"name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true}}, "yarn-install": {"name": "yarn-install", "severity": "high", "isDirect": false, "via": ["cross-spawn"], "effects": ["@wdio/cli"], "range": "*", "nodes": ["node_modules/yarn-install"], "fixAvailable": {"name": "@wdio/cli", "version": "9.20.0", "isSemVerMajor": true}}}, "metadata": {"vulnerabilities": {"info": 0, "low": 4, "moderate": 2, "high": 15, "critical": 2, "total": 23}, "dependencies": {"prod": 1, "dev": 1483, "optional": 4, "peer": 1, "peerOptional": 0, "total": 1483}}}} $ /usr/bin/npm audit fix --only=dev --- stderr --- npm WARN invalid config only="dev" set in command line options npm WARN invalid config Must be one of: null, prod, production npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: '@wikimedia/codex@1.23.0', npm WARN EBADENGINE required: { node: '>=20', npm: '>=10.8.1' }, npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' } npm WARN EBADENGINE } npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: '@wikimedia/codex-icons@1.23.0', npm WARN EBADENGINE required: { node: '>=20', npm: '>=10.8.1' }, npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' } npm WARN EBADENGINE } npm WARN deprecated @types/easy-table@1.2.0: This is a stub types definition. easy-table provides its own type definitions, so you do not need this installed. npm WARN deprecated har-validator@5.1.5: this library is no longer supported npm WARN deprecated date-format@0.0.2: 0.x is no longer supported. Please upgrade to 4.x or higher. npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 --- stdout --- added 1482 packages, and audited 1483 packages in 21s 168 packages are looking for funding run `npm fund` for details # npm audit report axios <=1.11.0 Severity: high Axios Cross-Site Request Forgery Vulnerability - https://github.com/advisories/GHSA-wf5p-g6vw-rhxx axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL - https://github.com/advisories/GHSA-jr5f-v2jv-69x6 Axios is vulnerable to DoS attack through lack of data size check - https://github.com/advisories/GHSA-4hjh-wcwx-xvwj fix available via `npm audit fix --force` Will install chai-openapi-response-validator@0.14.1, which is a breaking change node_modules/axios openapi-validator >=0.14.2-alpha.0 Depends on vulnerable versions of axios node_modules/openapi-validator chai-openapi-response-validator 0.11.2 || >=0.14.2-alpha.0 Depends on vulnerable versions of openapi-validator node_modules/chai-openapi-response-validator cross-spawn <6.0.6 Severity: high Regular Expression Denial of Service (ReDoS) in cross-spawn - https://github.com/advisories/GHSA-3xgq-45jj-v275 fix available via `npm audit fix --force` Will install @wdio/cli@9.20.0, which is a breaking change node_modules/yarn-install/node_modules/cross-spawn yarn-install * Depends on vulnerable versions of cross-spawn node_modules/yarn-install @wdio/cli <=9.0.0-alpha.426 Depends on vulnerable versions of inquirer Depends on vulnerable versions of webdriverio Depends on vulnerable versions of yarn-install node_modules/@wdio/cli @wdio/junit-reporter 6.0.4 - 8.0.0-alpha.631 Depends on vulnerable versions of @wdio/cli node_modules/@wdio/junit-reporter @wdio/local-runner 6.0.4 - 8.46.0 Depends on vulnerable versions of @wdio/cli Depends on vulnerable versions of @wdio/runner node_modules/@wdio/local-runner @wdio/spec-reporter 6.0.4 - 8.0.0-alpha.631 Depends on vulnerable versions of @wdio/cli node_modules/@wdio/spec-reporter form-data <2.5.4 Severity: critical form-data uses unsafe random function in form-data for choosing boundary - https://github.com/advisories/GHSA-fjxv-7rqg-78g4 No fix available node_modules/request/node_modules/form-data request * Depends on vulnerable versions of form-data Depends on vulnerable versions of tough-cookie node_modules/request mwbot >=0.1.6 Depends on vulnerable versions of request node_modules/mwbot wdio-mediawiki * Depends on vulnerable versions of mwbot node_modules/wdio-mediawiki tar-fs 2.0.0 - 2.1.2 Severity: high tar-fs Vulnerable to Link Following and Path Traversal via Extracting a Crafted tar File - https://github.com/advisories/GHSA-pq67-2wwv-3xjx tar-fs can extract outside the specified dir with a specific tarball - https://github.com/advisories/GHSA-8cj5-5rvv-wf4v fix available via `npm audit fix --force` Will install @wdio/cli@9.20.0, which is a breaking change node_modules/tar-fs puppeteer-core 10.0.0 - 22.11.1 Depends on vulnerable versions of tar-fs Depends on vulnerable versions of ws node_modules/devtools/node_modules/puppeteer-core node_modules/puppeteer-core devtools >=7.16.5 Depends on vulnerable versions of puppeteer-core node_modules/devtools webdriverio 7.16.5 - 8.46.0 Depends on vulnerable versions of devtools Depends on vulnerable versions of puppeteer-core node_modules/webdriverio @wdio/runner 7.16.5 - 8.46.0 Depends on vulnerable versions of webdriverio node_modules/@wdio/runner tmp <=0.2.3 tmp allows arbitrary temporary file / directory write via symbolic link `dir` parameter - https://github.com/advisories/GHSA-52f5-9888-hmc6 fix available via `npm audit fix --force` Will install @wdio/cli@9.20.0, which is a breaking change node_modules/tmp external-editor >=1.1.1 Depends on vulnerable versions of tmp node_modules/external-editor inquirer 3.0.0 - 8.2.6 || 9.0.0 - 9.3.7 Depends on vulnerable versions of external-editor node_modules/inquirer tough-cookie <4.1.3 Severity: moderate tough-cookie Prototype Pollution vulnerability - https://github.com/advisories/GHSA-72xf-g2v4-qvf3 No fix available node_modules/tough-cookie ws 8.0.0 - 8.17.0 Severity: high ws affected by a DoS when handling a request with many HTTP headers - https://github.com/advisories/GHSA-3h5v-q93c-6h6q fix available via `npm audit fix --force` Will install @wdio/cli@9.20.0, which is a breaking change node_modules/devtools/node_modules/ws node_modules/puppeteer-core/node_modules/ws 23 vulnerabilities (3 low, 3 moderate, 15 high, 2 critical) To address issues that do not require attention, run: npm audit fix To address all issues possible (including breaking changes), run: npm audit fix --force Some issues need review, and may require choosing a different dependency. --- end --- Verifying that tests still pass $ /usr/bin/npm ci --- stderr --- npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: '@wikimedia/codex@1.23.0', npm WARN EBADENGINE required: { node: '>=20', npm: '>=10.8.1' }, npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' } npm WARN EBADENGINE } npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: '@wikimedia/codex-icons@1.23.0', npm WARN EBADENGINE required: { node: '>=20', npm: '>=10.8.1' }, npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' } npm WARN EBADENGINE } npm WARN deprecated @types/easy-table@1.2.0: This is a stub types definition. easy-table provides its own type definitions, so you do not need this installed. npm WARN deprecated har-validator@5.1.5: this library is no longer supported npm WARN deprecated date-format@0.0.2: 0.x is no longer supported. Please upgrade to 4.x or higher. npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 --- stdout --- added 1482 packages, and audited 1483 packages in 26s 168 packages are looking for funding run `npm fund` for details 23 vulnerabilities (3 low, 3 moderate, 15 high, 2 critical) To address issues that do not require attention, run: npm audit fix To address all issues possible (including breaking changes), run: npm audit fix --force Some issues need review, and may require choosing a different dependency. Run `npm audit` for details. --- end --- $ /usr/bin/npm test --- stderr --- PASS tests/jest/mediawiki.special.block/stores/block.test.js PASS tests/jest/mediawiki.special.block/BlockLog.test.js PASS tests/jest/mediawiki.special.block/UserLookup.test.js PASS tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js PASS tests/jest/mediawiki.special.block/ExpiryField.test.js PASS tests/jest/mediawiki.special.block/util.test.js PASS tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js PASS tests/jest/mediawiki.special.block/NamespacesField.test.js PASS tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js PASS tests/jest/mediawiki.special.block/ReasonField.test.js PASS tests/jest/mediawiki.special.block/BlockDetailsField.test.js PASS tests/jest/mediawiki.special.block/init.test.js PASS tests/jest/mediawiki.skinning.typeaheadSearch/App.test.js PASS tests/jest/mediawiki.special.block/AdditionalDetailsField.test.js PASS tests/jest/mediawiki.skinning.typeaheadSearch/urlGenerator.test.js PASS tests/jest/mediawiki.special.block/SpecialBlock.test.js (18.692 s) Jest: "/src/repo/resources/src/mediawiki.special.block/util.js" coverage threshold for lines (63%) not met: 62.5% Test Suites: 16 passed, 16 total Tests: 99 passed, 99 total Snapshots: 1 passed, 1 total Time: 27.087 s Ran all test suites. --- stdout --- > test > grunt lint && npm run doc && npm run jest Running "eslint:all" (eslint) task /src/repo/resources/src/jquery/jquery.makeCollapsible.js 425:1 warning Syntax error in namepath: ~'wikipage.collapsibleContent' jsdoc/valid-types /src/repo/resources/src/mediawiki.action.edit/edit.js 12:1 warning Syntax error in namepath: ~'wikipage.editform' jsdoc/valid-types /src/repo/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js 21:1 warning Syntax error in namepath: ~'postEdit' jsdoc/valid-types 36:1 warning Syntax error in namepath: ~'postEdit.afterRemoval' jsdoc/valid-types /src/repo/resources/src/mediawiki.authenticationPopup/index.js 38:1 warning The type 'userinfo' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.base/errorLogger.js 8:1 warning Syntax error in namepath: ~'global.error' jsdoc/valid-types 22:1 warning Syntax error in namepath: ~'error.caught' jsdoc/valid-types /src/repo/resources/src/mediawiki.base/log.js 14:1 warning Found more than one @return declaration jsdoc/require-returns 14:1 warning Found more than one @return declaration jsdoc/require-returns-check /src/repo/resources/src/mediawiki.base/mediawiki.base.js 217:1 warning The type 'mediawiki' is undefined jsdoc/no-undefined-types 243:1 warning The type 'mediawiki' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.debug/debug.js 1:1 warning Unused eslint-disable directive (no problems were reported from 'es-x/no-array-prototype-includes') /src/repo/resources/src/mediawiki.diff/inlineFormatToggle.js 150:1 warning Syntax error in namepath: ~'wikipage.diff.wikitextDiffBody' jsdoc/valid-types 162:1 warning Syntax error in namepath: ~'wikipage.diff.diffTypeSwitch' jsdoc/valid-types /src/repo/resources/src/mediawiki.editRecovery/edit.js 184:1 warning Syntax error in namepath: ~'editRecovery.loadEnd' jsdoc/valid-types /src/repo/resources/src/mediawiki.htmlform/cond-state.js 48:1 warning Found more than one @return declaration jsdoc/require-returns-check /src/repo/resources/src/mediawiki.htmlform/htmlform.js 5:1 warning Syntax error in namepath: ~'htmlform.enhance' jsdoc/valid-types /src/repo/resources/src/mediawiki.inspect.js 61:1 warning The type 'mediawiki' is undefined jsdoc/no-undefined-types 91:1 warning The type 'mediawiki' is undefined jsdoc/no-undefined-types 112:2 warning Found more than one @return declaration jsdoc/require-returns 112:2 warning Found more than one @return declaration jsdoc/require-returns-check 121:1 warning The type 'mediawiki' is undefined jsdoc/no-undefined-types 152:1 warning The type 'mediawiki' is undefined jsdoc/no-undefined-types 164:1 warning The type 'mediawiki' is undefined jsdoc/no-undefined-types 175:1 warning The type 'mediawiki' is undefined jsdoc/no-undefined-types 203:1 warning The type 'mediawiki' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js 142:1 warning Found more than one @return declaration jsdoc/require-returns 142:1 warning Found more than one @return declaration jsdoc/require-returns-check /src/repo/resources/src/mediawiki.language.months/months.js 44:1 warning The type 'Months' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.notification.convertmessagebox.js 13:1 warning Syntax error in namepath: (require("mediawiki.notification.convertmessagebox")) jsdoc/valid-types /src/repo/resources/src/mediawiki.page.preview.js 416:1 warning Syntax error in namepath: ~'wikipage.tableOfContents' jsdoc/valid-types /src/repo/resources/src/mediawiki.page.ready/ready.js 96:1 warning Syntax error in namepath: ~'wikipage.indicators' jsdoc/valid-types 116:1 warning Syntax error in namepath: ~'wikipage.content' jsdoc/valid-types 137:1 warning Syntax error in namepath: ~'wikipage.categories' jsdoc/valid-types 153:1 warning Syntax error in namepath: ~'wikipage.diff' jsdoc/valid-types 184:1 warning Syntax error in namepath: ~'skin.logout' jsdoc/valid-types /src/repo/resources/src/mediawiki.page.watch.ajax/watch-ajax.js 128:1 warning Syntax error in namepath: ~'wikipage.watchlistChange' jsdoc/valid-types /src/repo/resources/src/mediawiki.rcfilters/Controller.js 330:1 warning Found more than one @return declaration jsdoc/require-returns 330:1 warning Found more than one @return declaration jsdoc/require-returns-check 550:1 warning Syntax error in namepath: ~'RcFilters.highlight.enable' jsdoc/valid-types /src/repo/resources/src/mediawiki.rcfilters/dm/FilterItem.js 81:1 warning Found more than one @return declaration jsdoc/require-returns 81:1 warning Found more than one @return declaration jsdoc/require-returns-check 335:1 warning The type 'update' is undefined jsdoc/no-undefined-types 351:1 warning The type 'update' is undefined jsdoc/no-undefined-types 366:1 warning The type 'update' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.rcfilters/dm/FiltersViewModel.js 1185:1 warning The type 'searchChange' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.rcfilters/mw.rcfilters.js 176:1 warning Syntax error in namepath: ~'structuredChangeFilters.ui.initialized' jsdoc/valid-types /src/repo/resources/src/mediawiki.rcfilters/ui/FilterTagMultiselectWidget.js 400:1 warning Syntax error in namepath: ~'RcFilters.popup.open' jsdoc/valid-types /src/repo/resources/src/mediawiki.searchSuggest/searchSuggest.js 36:1 warning The type 'ResponseMetaData' is undefined jsdoc/no-undefined-types 43:1 warning The type 'ResponseFunction' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.skinning.typeaheadSearch/App.vue 221:1 warning The type 'AbortableSearchFetch' is undefined jsdoc/no-undefined-types 256:1 warning The type 'SearchSubmitEvent' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.skinning.typeaheadSearch/fetch.js 21:1 warning The type 'RequestInit' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js 2:1 warning The type 'FetchEndEvent' is undefined jsdoc/no-undefined-types 16:1 warning The type 'SuggestionClickEvent' is undefined jsdoc/no-undefined-types 16:1 warning The type 'SearchSubmitEvent' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.skinning.typeaheadSearch/restSearchClient.js 4:1 warning Syntax error in type: import('./urlGenerator.js').UrlGenerator jsdoc/valid-types 11:1 warning The type 'RestResult' is undefined jsdoc/no-undefined-types 17:1 warning The type 'SearchResult' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.skinning.typeaheadSearch/urlGenerator.js 2:1 warning The type 'Record' is undefined jsdoc/no-undefined-types 9:1 warning The type 'RestResult' is undefined jsdoc/no-undefined-types 9:1 warning The type 'SearchResult' is undefined jsdoc/no-undefined-types 29:1 warning The type 'RestResult' is undefined jsdoc/no-undefined-types 29:1 warning The type 'SearchResult' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.special.apisandbox/ApiSandboxLayout.js 44:1 warning Found more than one @return declaration jsdoc/require-returns 44:1 warning Found more than one @return declaration jsdoc/require-returns-check /src/repo/resources/src/mediawiki.special.block/init.js 26:1 warning Syntax error in namepath: ~'SpecialBlock.block' jsdoc/valid-types 36:1 warning Syntax error in namepath: ~'SpecialBlock.form' jsdoc/valid-types /src/repo/resources/src/mediawiki.template.js 26:1 warning The type 'TemplateRenderer' is undefined jsdoc/no-undefined-types 40:1 warning The type 'TemplateRenderFunction' is undefined jsdoc/no-undefined-types 45:1 warning The type 'TemplateCompileFunction' is undefined jsdoc/no-undefined-types 61:1 warning The type 'TemplateCompiler' is undefined jsdoc/no-undefined-types 88:1 warning The type 'TemplateCompiler' is undefined jsdoc/no-undefined-types 107:1 warning The type 'TemplateRenderer' is undefined jsdoc/no-undefined-types 125:1 warning The type 'TemplateRenderer' is undefined jsdoc/no-undefined-types 147:1 warning The type 'TemplateRenderer' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.util/util.js 626:1 warning Syntax error in namepath: ~'util.addPortlet' jsdoc/valid-types 795:1 warning Syntax error in namepath: ~'util.addPortletLink' jsdoc/valid-types /src/repo/resources/src/mediawiki.widgets.datetime/DateTimeFormatter.js 268:1 warning The type 'FieldSpecificationObject' is undefined jsdoc/no-undefined-types 632:1 warning The type 'CalendarGridData' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.widgets.datetime/DiscordianDateTimeFormatter.js 74:1 warning The type 'FieldSpecificationObject' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.widgets.datetime/ProlepticGregorianDateTimeFormatter.js 306:1 warning The type 'FieldSpecificationObject' is undefined jsdoc/no-undefined-types /src/repo/resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js 50:1 warning The type 'DropdownOptions' is undefined jsdoc/no-undefined-types /src/repo/resources/src/startup/mediawiki.loader.js 61:1 warning Syntax error in namepath: ~'resourceloader.exception' jsdoc/valid-types /src/repo/resources/src/startup/startup.js 48:3 warning Unused eslint-disable directive (no problems were reported from 'es-x/no-promise') 72:3 warning Unused eslint-disable directive (no problems were reported from 'es-x/no-regexp-prototype-flags') /src/repo/tests/qunit/data/testrunner.js 112:2 warning Missing JSDoc @return declaration jsdoc/require-returns /src/repo/tests/selenium/wdio-mediawiki/Util.js 35:1 warning This line has a length of 107. Maximum allowed is 100 max-len /src/repo/tests/selenium/wdio-mediawiki/wdio-defaults.conf.js 84:1 warning This line has a length of 108. Maximum allowed is 100 max-len ✖ 89 problems (0 errors, 89 warnings) 0 errors and 3 warnings potentially fixable with the `--fix` option. Running "banana:core" (banana) task >> 1 message directory checked. Running "banana:codex" (banana) task >> 1 message directory checked. Running "banana:datetime" (banana) task >> 1 message directory checked. Running "banana:exif" (banana) task >> 1 message directory checked. Running "banana:preferences" (banana) task >> 1 message directory checked. Running "banana:api" (banana) task >> 1 message directory checked. Running "banana:rest" (banana) task >> 1 message directory checked. Running "banana:installer" (banana) task >> 1 message directory checked. Running "banana:paramvalidator" (banana) task >> 1 message directory checked. Running "stylelint:resources" (stylelint) task >> resources/src/mediawiki.skinning/content.media-dark.less >> 32:1 ⚠ Unexpected browser feature "prefers-color-scheme" is not supported by Firefox 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66, Chrome 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75, Safari 10,11,12,10.1,11.1, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5 plugin/no-unsupported-browser-features >> >> ⚠ 1 problem (0 errors, 1 warning) ⚠ 1 warning >> Linted 213 files without errors Running "stylelint:config" (stylelint) task >> Linted 1 files without errors Done. > doc > jsdoc -c jsdoc.json > jest > jest --config tests/jest/jest.config.js ------------------------------------|---------|----------|---------|---------|--------------------------------------------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ------------------------------------|---------|----------|---------|---------|--------------------------------------------------------- All files | 92.74 | 90.56 | 81.05 | 92.74 | mediawiki.skinning.typeaheadSearch | 86.31 | 84.61 | 66.66 | 86.31 | App.vue | 76.15 | 66.66 | 40 | 76.15 | 181-194,204-217,225-252,259-261,265,269-270,274-278 fetch.js | 100 | 87.5 | 75 | 100 | 31 instrumentation.js | 82.82 | 100 | 60 | 82.82 | 4-13,18-24 restSearchClient.js | 100 | 76.92 | 100 | 100 | 28,45-49 urlGenerator.js | 100 | 100 | 100 | 100 | mediawiki.special.block | 89.51 | 93.22 | 82.35 | 89.51 | SpecialBlock.vue | 93.89 | 93.18 | 72.72 | 93.89 | 245-254,297-302,308-322,440-441,452-454 init.js | 100 | 100 | 100 | 100 | util.js | 62.5 | 90.9 | 100 | 62.5 | 66-107 mediawiki.special.block/components | 95.08 | 92.34 | 87.8 | 95.08 | AdditionalDetailsField.vue | 100 | 80 | 100 | 100 | 68 BlockDetailsField.vue | 100 | 100 | 100 | 100 | BlockLog.vue | 98.94 | 100 | 83.33 | 98.94 | 337-340,401 BlockTypeField.vue | 95.04 | 50 | 100 | 95.04 | 73-77 ConfirmationDialog.vue | 96.34 | 100 | 50 | 96.34 | 70-72 ExpiryField.vue | 95.07 | 89.47 | 100 | 95.07 | 145-146,148-149,177-186,245-246 NamespacesField.vue | 90.42 | 88.88 | 66.66 | 90.42 | 60-68 PagesField.vue | 70.06 | 50 | 50 | 70.06 | 46-47,56-57,72-79,88-90,97-118,127-133 ReasonField.vue | 97.14 | 93.75 | 100 | 97.14 | 98-101 UserLookup.vue | 97.68 | 97.43 | 100 | 97.68 | 144-146,195-197,230-231 ValidatingTextInput.js | 100 | 100 | 100 | 100 | mediawiki.special.block/stores | 95.65 | 87.77 | 90 | 95.65 | block.js | 95.65 | 87.77 | 90 | 95.65 | 322-323,432-433,435-436,456-457,460-461,464-465,479-494 ------------------------------------|---------|----------|---------|---------|--------------------------------------------------------- --- end --- $ node_modules/.bin/jest -u --- stderr --- FAIL tests/qunit/resources/jquery.tablesorter.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'jquery.tablesorter', QUnit.newMwEnvironment( { | ^ 2 | beforeEach: function () { 3 | this.liveMonths = mw.language.months; 4 | mw.language.months = { at Object.<anonymous> (tests/qunit/resources/jquery.tablesorter.test.js:1:61) FAIL tests/qunit/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js ● Test suite failed to run Cannot find module 'mediawiki.rcfilters.filters.ui' from 'tests/qunit/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js' 1 | /* eslint-disable camelcase */ 2 | ( function () { > 3 | const rcfilters = require( 'mediawiki.rcfilters.filters.ui' ); | ^ 4 | const filterDefinition = [ { 5 | name: 'group1', 6 | type: 'send_unselected_if_any', at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js:3:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js:1550:2) FAIL tests/qunit/resources/mediawiki.jqueryMsg.test.js ● Test suite failed to run Cannot find module 'mediawiki.jqueryMsg' from 'tests/qunit/resources/mediawiki.jqueryMsg.test.js' 1 | ( function () { > 2 | const jqueryMsg = require( 'mediawiki.jqueryMsg' ).test; | ^ 3 | 4 | /* eslint-disable camelcase */ 5 | let formatText, formatParse, specialCharactersPageName, expectedListUsers, at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.jqueryMsg.test.js:2:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.jqueryMsg.test.js:1469:2) FAIL tests/qunit/resources/mediawiki.util/util.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.util', QUnit.newMwEnvironment( { | ^ 2 | messages: { 3 | // Used by accessKeyLabel in test for addPortletLink 4 | brackets: '[$1]', at Object.<anonymous> (tests/qunit/resources/mediawiki.util/util.test.js:1:57) FAIL tests/qunit/resources/startup/mw.loader.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | ( function () { > 2 | QUnit.module( 'mw.loader', QUnit.newMwEnvironment( { | ^ 3 | beforeEach: function ( assert ) { 4 | // Expose for load.mock.php 5 | mw.loader.testFail = function ( reason ) { at QUnit (tests/qunit/resources/startup/mw.loader.test.js:2:2) at Object.<anonymous> (tests/qunit/resources/startup/mw.loader.test.js:1236:2) FAIL tests/qunit/resources/mediawiki.language.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | 'use strict'; 3 | > 4 | QUnit.module( 'mediawiki.language', QUnit.newMwEnvironment( { | ^ 5 | beforeEach: function () { 6 | this.userLang = mw.config.get( 'wgUserLanguage' ); 7 | this.liveLangData = mw.language.data; at QUnit (tests/qunit/resources/mediawiki.language.test.js:4:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.language.test.js:915:2) FAIL tests/qunit/resources/mediawiki.Title.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 75 | }; 76 | > 77 | QUnit.module( 'mediawiki.Title', QUnit.newMwEnvironment( { | ^ 78 | // mw.Title relies on these three config vars 79 | // Restore them after each test run 80 | config: { at QUnit (tests/qunit/resources/mediawiki.Title.test.js:77:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.Title.test.js:771:2) FAIL tests/qunit/resources/jquery.makeCollapsible.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | /* eslint-disable no-jquery/no-class-state */ > 2 | QUnit.module( 'jquery.makeCollapsible', () => { | ^ 3 | const loremIpsum = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.'; 4 | 5 | /** at Object.QUnit (tests/qunit/resources/jquery.makeCollapsible.test.js:2:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.test.js' However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { MultimediaViewer } = require( 'mmv' ); | ^ 2 | const { getMultimediaViewer } = require( './mmv.testhelpers.js' ); 3 | const { MultimediaViewerBootstrap } = require( 'mmv.bootstrap' ); 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.test.js:1:30) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.bootstrap.test.js ● Test suite failed to run Cannot find module 'mmv.bootstrap' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.bootstrap.test.js' > 1 | const { MultimediaViewerBootstrap } = require( 'mmv.bootstrap' ); | ^ 2 | const { asyncMethod, waitForAsync, getMultimediaViewer } = require( './mmv.testhelpers.js' ); 3 | 4 | QUnit.module( 'mmv.bootstrap', QUnit.newMwEnvironment( { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.bootstrap.test.js:1:39) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTemplateSpecModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | { > 2 | QUnit.module( 've.dm.MWTemplateSpecModel' ); | ^ 3 | 4 | /** 5 | * @param {string[]} [parameterNames] at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTemplateSpecModel.test.js:2:2) FAIL tests/jest/mediawiki.special.block/SpecialBlock.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.test.js:5:29) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingDialog.test.js ● Test suite failed to run ReferenceError: /src/repo/extensions/CheckUser/tests/jest/components/tempAccountsOnboardingDialog.test.js: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables. Invalid variable access: useComputedDirectionMock Allowed objects: AbortController, AbortSignal, AggregateError, Array, ArrayBuffer, Atomics, BigInt, BigInt64Array, BigUint64Array, Blob, Boolean, BroadcastChannel, Buffer, ByteLengthQueuingStrategy, CompressionStream, CountQueuingStrategy, Crypto, CryptoKey, CustomEvent, DOMException, DataView, Date, DecompressionStream, Error, EvalError, Event, EventTarget, File, FinalizationRegistry, Float32Array, Float64Array, FormData, Function, Generator, GeneratorFunction, Headers, Infinity, Int16Array, Int32Array, Int8Array, InternalError, Intl, JSON, Map, Math, MessageChannel, MessageEvent, MessagePort, NaN, Number, Object, Performance, PerformanceEntry, PerformanceMark, PerformanceMeasure, PerformanceObserver, PerformanceObserverEntryList, PerformanceResourceTiming, Promise, Proxy, RangeError, ReadableByteStreamController, ReadableStream, ReadableStreamBYOBReader, ReadableStreamBYOBRequest, ReadableStreamDefaultController, ReadableStreamDefaultReader, ReferenceError, Reflect, RegExp, Request, Response, Set, SharedArrayBuffer, String, SubtleCrypto, Symbol, SyntaxError, TextDecoder, TextDecoderStream, TextEncoder, TextEncoderStream, TransformStream, TransformStreamDefaultController, TypeError, URIError, URL, URLSearchParams, Uint16Array, Uint32Array, Uint8Array, Uint8ClampedArray, WeakMap, WeakRef, WeakSet, WebAssembly, WritableStream, WritableStreamDefaultController, WritableStreamDefaultWriter, __dirname, __filename, arguments, atob, btoa, clearImmediate, clearInterval, clearTimeout, console, crypto, decodeURI, decodeURIComponent, encodeURI, encodeURIComponent, escape, eval, expect, exports, fetch, global, globalThis, isFinite, isNaN, jest, module, parseFloat, parseInt, performance, process, queueMicrotask, require, setImmediate, setInterval, setTimeout, structuredClone, undefined, unescape. Note: This is a precaution to guard against uninitialized mock variables. If it is ensured that the mock is required lazily, variable names prefixed with `mock` (case insensitive) are permitted. 15 | 16 | return Object.assign( > 17 | { __esModule: true }, originalModule, { useComputedDirection: useComputedDirectionMock } | ^^^^^^^^^^^^^^^^^^^^^^^^ 18 | ); 19 | } ); 20 | at File.buildCodeFrameError (node_modules/@babel/core/src/transformation/file/file.ts:247:12) at NodePath.buildError [as buildCodeFrameError] (node_modules/@babel/traverse/src/path/index.ts:141:21) at call (node_modules/@babel/traverse/src/visitors.ts:303:14) at NodePath.call [as _call] (node_modules/@babel/traverse/src/path/context.ts:36:20) at NodePath.call (node_modules/@babel/traverse/src/path/context.ts:21:18) at NodePath.call [as visit] (node_modules/@babel/traverse/src/path/context.ts:97:31) at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16) at TraversalContext.visitQueue [as visitMultiple] (node_modules/@babel/traverse/src/context.ts:99:17) at TraversalContext.visitMultiple [as visit] (node_modules/@babel/traverse/src/context.ts:178:19) at visit (node_modules/@babel/traverse/src/traverse-node.ts:40:17) at NodePath.visit (node_modules/@babel/traverse/src/path/context.ts:104:33) at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16) at TraversalContext.visitQueue [as visitSingle] (node_modules/@babel/traverse/src/context.ts:109:19) at TraversalContext.visitSingle [as visit] (node_modules/@babel/traverse/src/context.ts:180:19) at visit (node_modules/@babel/traverse/src/traverse-node.ts:40:17) at traverse (node_modules/@babel/traverse/src/index.ts:83:15) at transformFile (node_modules/@babel/core/src/transformation/index.ts:124:15) at transformFile.next (<anonymous>) at transformFile (node_modules/@babel/core/src/transformation/index.ts:48:12) at run.next (<anonymous>) at transform (node_modules/@babel/core/src/transform.ts:29:20) at transform.next (<anonymous>) at evaluateSync (node_modules/gensync/index.js:251:28) at sync (node_modules/gensync/index.js:89:14) at fn (node_modules/@babel/core/src/errors/rewrite-stack-trace.ts:99:14) at transformSync (node_modules/@babel/core/src/transform.ts:66:52) at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:545:31) at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40) at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api', ( hooks ) => { | ^ 2 | const originalFormData = window.FormData; 3 | const originalMwVersion = mw.config.get( 'wgVersion' ); 4 | hooks.beforeEach( function () { at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.test.js:1:45) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIPInfoStep.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIPInfoStep.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | 'use strict'; 2 | > 3 | const TempAccountsOnboardingIPInfoStep = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIPInfoStep.vue' ), | ^ 4 | utils = require( '@vue/test-utils' ), 5 | { mockApiSaveOption, waitFor } = require( '../utils.js' ); 6 | at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIPInfoStep.test.js:3:42) FAIL tests/qunit/resources/mediawiki.Uri.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.Uri', ( hooks ) => { | ^ 2 | hooks.beforeEach( function () { 3 | this.sandbox.replace( mw, 'Uri', mw.UriRelative( 'http://example.org/w/index.php' ) ); 4 | } ); at Object.<anonymous> (tests/qunit/resources/mediawiki.Uri.test.js:1:45) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/ipReveal.test.js ● Test suite failed to run ReferenceError: OO is not defined 32 | this.popup.connect( this, { toggle: 'onVisibilityChanged' } ); 33 | } > 34 | OO.inheritClass( BlockDetailsPopupButtonWidget, OO.ui.PopupButtonWidget ); | ^ 35 | 36 | /** 37 | * Promise holding resolved block details, reused between different popups on the same page. at Object.OO (extensions/CheckUser/modules/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.js:34:1) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/ipReveal.js:1:86) at Object.require (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/ipReveal.test.js:3:18) FAIL tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js ● Test suite failed to run Cannot find module 'mediawiki.rcfilters.filters.ui' from 'tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js' 1 | /* eslint-disable camelcase */ 2 | ( function () { > 3 | const rcfilters = require( 'mediawiki.rcfilters.filters.ui' ); | ^ 4 | const filterDefinition = [ { 5 | name: 'group1', 6 | type: 'send_unselected_if_any', at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js:3:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js:608:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.GuessedThumbnailInfo.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.GuessedThumbnailInfo.test.js' However, Jest was able to find: './mmv.provider.Api.test.js' './mmv.provider.GuessedThumbnailInfo.test.js' './mmv.provider.Image.test.js' './mmv.provider.ImageInfo.test.js' './mmv.provider.ThumbnailInfo.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { GuessedThumbnailInfo } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.provider.GuessedThumbnailInfo', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.GuessedThumbnailInfo.test.js:18:34) FAIL skins/Vector/tests/jest/tableOfContents.test.js ● Test suite failed to run Cannot find module 'mustache' from 'skins/Vector/tests/jest/tableOfContents.test.js' > 1 | const mustache = require( 'mustache' ); | ^ 2 | const fs = require( 'fs' ); 3 | const tableOfContentsTemplate = fs.readFileSync( 'includes/templates/TableOfContents.mustache', 'utf8' ); 4 | const tableOfContentsContentsTemplate = fs.readFileSync( 'includes/templates/TableOfContents__list.mustache', 'utf8' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (skins/Vector/tests/jest/tableOfContents.test.js:1:39) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTemplateModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 21 | }; 22 | > 23 | QUnit.module( 've.dm.MWTemplateModel' ); | ^ 24 | 25 | /** 26 | * Create a new MWTemplateModel initialized with a static transclusion data fixture. at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTemplateModel.test.js:23:2) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/SpecialBlock.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | let server; 7 | > 8 | QUnit.module( 'ext.checkUser.tempAccounts.SpecialBlock', QUnit.newMwEnvironment( { | ^ 9 | beforeEach: function () { 10 | this.server = this.sandbox.useFakeServer(); 11 | this.server.respondImmediately = true; at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/SpecialBlock.test.js:8:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.EmbedFileFormatter.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.EmbedFileFormatter.test.js' However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { License, ImageModel } = require( 'mmv' ); | ^ 2 | const { EmbedFileFormatter } = require( 'mmv.ui.reuse' ); 3 | 4 | QUnit.module( 'mmv.EmbedFileFormatter', QUnit.newMwEnvironment() ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.EmbedFileFormatter.test.js:1:33) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.embed.test.js ● Test suite failed to run Cannot find module 'mmv.ui.reuse' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.embed.test.js' 16 | */ 17 | > 18 | const { Embed, Utils } = require( 'mmv.ui.reuse' ); | ^ 19 | 20 | const $qf = $( '#qunit-fixture' ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.embed.test.js:18:26) FAIL extensions/VisualEditor/modules/ve-mw/tests/preinit/ve.utils.parsoid.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.utils.parsoid', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | QUnit.test( 'reduplicateStyles/deduplicateStyles', ( assert ) => { 11 | // Test cases based on this page and the templates there: at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/preinit/ve.utils.parsoid.test.js:8:1) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/initOnLoad.test.js ● Test suite failed to run ReferenceError: OO is not defined 32 | this.popup.connect( this, { toggle: 'onVisibilityChanged' } ); 33 | } > 34 | OO.inheritClass( BlockDetailsPopupButtonWidget, OO.ui.PopupButtonWidget ); | ^ 35 | 36 | /** 37 | * Promise holding resolved block details, reused between different popups on the same page. at Object.OO (extensions/CheckUser/modules/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.js:34:1) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/ipReveal.js:1:86) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/initOnLoad.js:1:44) at Object.require (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/initOnLoad.test.js:3:20) FAIL tests/qunit/resources/mediawiki.user.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.user', QUnit.newMwEnvironment(), ( hooks ) => { | ^ 2 | hooks.beforeEach( function () { 3 | this.server = this.sandbox.useFakeServer(); 4 | this.server.respondImmediately = true; at Object.<anonymous> (tests/qunit/resources/mediawiki.user.test.js:1:72) FAIL extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ImageInfo.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ImageInfo.test.js' However, Jest was able to find: './mmv.provider.Api.test.js' './mmv.provider.GuessedThumbnailInfo.test.js' './mmv.provider.Image.test.js' './mmv.provider.ImageInfo.test.js' './mmv.provider.ThumbnailInfo.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { ImageInfo } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.provider.ImageInfo', QUnit.newMwEnvironment( { 21 | // mw.Title relies on these three config vars at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ImageInfo.test.js:18:23) FAIL tests/qunit/resources/mediawiki.base/mediawiki.base.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.base', ( hooks ) => { | ^ 2 | hooks.beforeEach( function () { 3 | this.clock = this.sandbox.useFakeTimers(); 4 | } ); at Object.<anonymous> (tests/qunit/resources/mediawiki.base/mediawiki.base.test.js:1:46) FAIL extensions/WikiEditor/tests/qunit/ext.wikiEditor.toolbar.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'ext.wikiEditor.toolbar', ( hooks ) => { | ^ 2 | hooks.beforeEach( function () { 3 | const $target = $( '<textarea>' ) 4 | .attr( 'id', 'wpTextBox1' ) at Object.<anonymous> (extensions/WikiEditor/tests/qunit/ext.wikiEditor.toolbar.test.js:1:54) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.HtmlUtils.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.HtmlUtils.test.js' However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { HtmlUtils } = require( 'mmv' ); | ^ 19 | 20 | /* eslint-disable no-jquery/no-parse-html-literal */ 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.HtmlUtils.test.js:18:23) FAIL tests/qunit/resources/mediawiki.rcfilters/UriProcessor.test.js ● Test suite failed to run Cannot find module 'mediawiki.rcfilters.filters.ui' from 'tests/qunit/resources/mediawiki.rcfilters/UriProcessor.test.js' 2 | /* eslint no-underscore-dangle: "off" */ 3 | ( function () { > 4 | const rcfilters = require( 'mediawiki.rcfilters.filters.ui' ); | ^ 5 | const mockFilterStructure = [ { 6 | name: 'group1', 7 | title: 'Group 1', at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.rcfilters/UriProcessor.test.js:4:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.rcfilters/UriProcessor.test.js:308:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboxinterface.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboxinterface.test.js' However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { LightboxInterface } = require( 'mmv' ); | ^ 2 | const { getMultimediaViewer } = require( './mmv.testhelpers.js' ); 3 | 4 | let oldScrollTo; at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboxinterface.test.js:1:31) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/initOnHook.test.js ● Test suite failed to run ReferenceError: OO is not defined 32 | this.popup.connect( this, { toggle: 'onVisibilityChanged' } ); 33 | } > 34 | OO.inheritClass( BlockDetailsPopupButtonWidget, OO.ui.PopupButtonWidget ); | ^ 35 | 36 | /** 37 | * Promise holding resolved block details, reused between different popups on the same page. at Object.OO (extensions/CheckUser/modules/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.js:34:1) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/ipReveal.js:1:86) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/initOnHook.js:1:44) at Object.require (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/initOnHook.test.js:3:20) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/investigate/blockform.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const addBlockForm = require( '../../../../modules/ext.checkUser/investigate/blockform.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.investigate.blockform', QUnit.newMwEnvironment() ); | ^ 6 | 7 | function setUpDocumentForTest( targets ) { 8 | // eslint-disable-next-line no-jquery/no-global-selector at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/investigate/blockform.test.js:5:1) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/getUsersBlockForm.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const getUsersBlockForm = require( '../../../../modules/ext.checkUser/checkuser/getUsersBlockForm.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.getUsersBlockForm', QUnit.newMwEnvironment() ); | ^ 6 | 7 | /** 8 | * Set up the QUnit fixture for testing the getUsersBlockForm function. at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/getUsersBlockForm.test.js:5:1) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/downloadPageAction.test.js ● Test suite failed to run ReferenceError: $ is not defined 5 | $el: $( '<span>' ) 6 | } ); > 7 | const Deferred = $.Deferred; | ^ 8 | const windowChrome = { chrome: true }; 9 | const windowNotChrome = {}; 10 | const downloadAction = require( 'skins.minerva.scripts/downloadPageAction.js' ); at $ (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/downloadPageAction.test.js:7:19) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/downloadPageAction.test.js:196:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Image.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Image.test.js' However, Jest was able to find: './mmv.model.Image.test.js' './mmv.model.License.test.js' './mmv.model.Repo.test.js' './mmv.model.TaskQueue.test.js' './mmv.model.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { ImageModel, License } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.model.Image', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Image.test.js:18:33) FAIL tests/jest/mediawiki.special.block/stores/block.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/stores/block.test.js:6:29) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanel.test.js ● Test suite failed to run Cannot find module 'mmv.bootstrap' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanel.test.js' > 1 | const { Config } = require( 'mmv.bootstrap' ); | ^ 2 | const { MetadataPanel, License } = require( 'mmv' ); 3 | 4 | const mwMessagesExists = mw.messages.exists; at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanel.test.js:1:20) FAIL tests/qunit/resources/mediawiki.DateFormatter/DateFormatter.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 4 | const nextDay = new Date( '2025-01-02T00:00:00Z' ); 5 | > 6 | QUnit.module( 'mediawiki.DateFormatter static functions', ( hooks ) => { | ^ 7 | let userOptions; 8 | 9 | function fakeOptionsGet( key, fallback ) { at Object.QUnit (tests/qunit/resources/mediawiki.DateFormatter/DateFormatter.test.js:6:1) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.InternalList.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 8 | */ 9 | > 10 | QUnit.module( 've.dm.InternalList (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 11 | 12 | /* Tests */ 13 | at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.InternalList.test.js:10:1) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/TitleUtil.test.js ● Test suite failed to run Cannot find module 'skins.minerva.scripts/TitleUtil.js' from 'skins/MinervaNeue/tests/qunit/skins.minerva.scripts/TitleUtil.test.js' 1 | ( function () { > 2 | const TitleUtil = require( 'skins.minerva.scripts/TitleUtil.js' ); | ^ 3 | const UriUtil = require( 'skins.minerva.scripts/UriUtil.js' ); 4 | 5 | QUnit.module( 'Minerva TitleUtil', QUnit.newMwEnvironment( { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/TitleUtil.test.js:2:20) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/TitleUtil.test.js:274:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.ThumbnailWidthCalculator.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.ThumbnailWidthCalculator.test.js' However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { ThumbnailWidthCalculator } = require( 'mmv' ); | ^ 2 | 3 | QUnit.module( 'mmv.ThumbnailWidthCalculator', QUnit.newMwEnvironment() ); 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.ThumbnailWidthCalculator.test.js:1:38) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.Config.test.js ● Test suite failed to run Cannot find module 'mmv.bootstrap' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.Config.test.js' 16 | */ 17 | > 18 | const { Config } = require( 'mmv.bootstrap' ); | ^ 19 | const { createLocalStorage, getFakeLocalStorage } = require( './mmv.testhelpers.js' ); 20 | const config0 = mw.config; 21 | const storage = mw.storage; at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.Config.test.js:18:20) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.dialog.test.js ● Test suite failed to run Cannot find module 'mmv.ui.reuse' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.dialog.test.js' 16 | */ 17 | > 18 | const { ReuseDialog } = require( 'mmv.ui.reuse' ); | ^ 19 | 20 | function makeReuseDialog( sandbox ) { 21 | const $fixture = $( '#qunit-fixture' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.dialog.test.js:18:25) FAIL tests/qunit/resources/jquery.lengthLimit.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'jquery.lengthLimit', () => { | ^ 2 | // Simple sample (20 chars, 20 bytes) 3 | const simpleSample = '12345678901234567890'; 4 | at Object.<anonymous> (tests/qunit/resources/jquery.lengthLimit.test.js:1:43) FAIL extensions/CheckUser/tests/jest/components/showIPButton.test.js ● Test suite failed to run ReferenceError: /src/repo/extensions/CheckUser/tests/jest/components/showIPButton.test.js: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables. Invalid variable access: getFormattedBlockDetails Allowed objects: AbortController, AbortSignal, AggregateError, Array, ArrayBuffer, Atomics, BigInt, BigInt64Array, BigUint64Array, Blob, Boolean, BroadcastChannel, Buffer, ByteLengthQueuingStrategy, CompressionStream, CountQueuingStrategy, Crypto, CryptoKey, CustomEvent, DOMException, DataView, Date, DecompressionStream, Error, EvalError, Event, EventTarget, File, FinalizationRegistry, Float32Array, Float64Array, FormData, Function, Generator, GeneratorFunction, Headers, Infinity, Int16Array, Int32Array, Int8Array, InternalError, Intl, JSON, Map, Math, MessageChannel, MessageEvent, MessagePort, NaN, Number, Object, Performance, PerformanceEntry, PerformanceMark, PerformanceMeasure, PerformanceObserver, PerformanceObserverEntryList, PerformanceResourceTiming, Promise, Proxy, RangeError, ReadableByteStreamController, ReadableStream, ReadableStreamBYOBReader, ReadableStreamBYOBRequest, ReadableStreamDefaultController, ReadableStreamDefaultReader, ReferenceError, Reflect, RegExp, Request, Response, Set, SharedArrayBuffer, String, SubtleCrypto, Symbol, SyntaxError, TextDecoder, TextDecoderStream, TextEncoder, TextEncoderStream, TransformStream, TransformStreamDefaultController, TypeError, URIError, URL, URLSearchParams, Uint16Array, Uint32Array, Uint8Array, Uint8ClampedArray, WeakMap, WeakRef, WeakSet, WebAssembly, WritableStream, WritableStreamDefaultController, WritableStreamDefaultWriter, __dirname, __filename, arguments, atob, btoa, clearImmediate, clearInterval, clearTimeout, console, crypto, decodeURI, decodeURIComponent, encodeURI, encodeURIComponent, escape, eval, expect, exports, fetch, global, globalThis, isFinite, isNaN, jest, module, parseFloat, parseInt, performance, process, queueMicrotask, require, setImmediate, setInterval, setTimeout, structuredClone, undefined, unescape. Note: This is a precaution to guard against uninitialized mock variables. If it is ensured that the mock is required lazily, variable names prefixed with `mock` (case insensitive) are permitted. 22 | jest.mock( 23 | '../../../modules/ext.checkUser.tempAccounts/api.js', > 24 | () => ( { getFormattedBlockDetails } ) | ^^^^^^^^^^^^^^^^^^^^^^^^ 25 | ); 26 | 27 | const ShowIPButton = require( '../../../modules/ext.checkUser.tempAccounts/ShowIPButton.vue' ); at File.buildCodeFrameError (node_modules/@babel/core/src/transformation/file/file.ts:247:12) at NodePath.buildError [as buildCodeFrameError] (node_modules/@babel/traverse/src/path/index.ts:141:21) at call (node_modules/@babel/traverse/src/visitors.ts:303:14) at NodePath.call [as _call] (node_modules/@babel/traverse/src/path/context.ts:36:20) at NodePath.call (node_modules/@babel/traverse/src/path/context.ts:21:18) at NodePath.call [as visit] (node_modules/@babel/traverse/src/path/context.ts:97:31) at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16) at TraversalContext.visitQueue [as visitMultiple] (node_modules/@babel/traverse/src/context.ts:99:17) at TraversalContext.visitMultiple [as visit] (node_modules/@babel/traverse/src/context.ts:178:19) at visit (node_modules/@babel/traverse/src/traverse-node.ts:40:17) at NodePath.visit (node_modules/@babel/traverse/src/path/context.ts:104:33) at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16) at TraversalContext.visitQueue [as visitSingle] (node_modules/@babel/traverse/src/context.ts:109:19) at TraversalContext.visitSingle [as visit] (node_modules/@babel/traverse/src/context.ts:180:19) at visit (node_modules/@babel/traverse/src/traverse-node.ts:40:17) at traverse (node_modules/@babel/traverse/src/index.ts:83:15) at transformFile (node_modules/@babel/core/src/transformation/index.ts:124:15) at transformFile.next (<anonymous>) at transformFile (node_modules/@babel/core/src/transformation/index.ts:48:12) at run.next (<anonymous>) at transform (node_modules/@babel/core/src/transform.ts:29:20) at transform.next (<anonymous>) at evaluateSync (node_modules/gensync/index.js:251:28) at sync (node_modules/gensync/index.js:89:14) at fn (node_modules/@babel/core/src/errors/rewrite-stack-trace.ts:99:14) at transformSync (node_modules/@babel/core/src/transform.ts:66:52) at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:545:31) at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40) at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19) FAIL skins/Vector/tests/jest/AB.test.js ● Test suite failed to run ReferenceError: mw is not defined 38 | const bucket = 'treatment'; 39 | const getBucketMock = jest.fn().mockReturnValue( bucket ); > 40 | mw.experiments.getBucket = getBucketMock; | ^ 41 | 42 | afterEach( () => { 43 | document.body.removeAttribute( 'class' ); at mw (skins/Vector/tests/jest/AB.test.js:40:2) at Object.describe (skins/Vector/tests/jest/AB.test.js:37:1) FAIL skins/Vector/tests/jest/pinnableElement.test.js ● Test suite failed to run Cannot find module 'mustache' from 'skins/Vector/tests/jest/pinnableElement.test.js' 2 | 3 | const features = require( '../../resources/skins.vector.js/features.js' ); > 4 | const mustache = require( 'mustache' ); | ^ 5 | const fs = require( 'fs' ); 6 | const pinnableHeaderTemplate = fs.readFileSync( 'includes/templates/PinnableHeader.mustache', 'utf8' ); 7 | const pinnableElement = require( '../../resources/skins.vector.js/pinnableElement.js' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (skins/Vector/tests/jest/pinnableElement.test.js:4:18) FAIL extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ThumbnailInfo.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ThumbnailInfo.test.js' However, Jest was able to find: './mmv.provider.Api.test.js' './mmv.provider.GuessedThumbnailInfo.test.js' './mmv.provider.Image.test.js' './mmv.provider.ImageInfo.test.js' './mmv.provider.ThumbnailInfo.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { ThumbnailInfo } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.provider.ThumbnailInfo', QUnit.newMwEnvironment( { 21 | // mw.Title relies on these three config vars at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ThumbnailInfo.test.js:18:27) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvas.test.js ● Test suite failed to run Cannot find module 'mmv.bootstrap' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvas.test.js' 16 | */ 17 | > 18 | const { LightboxImage } = require( 'mmv.bootstrap' ); | ^ 19 | const { Canvas } = require( 'mmv' ); 20 | 21 | QUnit.module( 'mmv.ui.Canvas', QUnit.newMwEnvironment() ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvas.test.js:18:27) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.ui.MWWikitextStringTransferHandler', ve.test.utils.newMwEnvironment( { | ^ 8 | beforeEach() { 9 | // Mock XHR for mw.Api() 10 | this.server = this.sandbox.useFakeServer(); at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js:7:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanelScroller.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.testhelpers.js' Require stack: extensions/MultimediaViewer/tests/qunit/mmv/mmv.testhelpers.js extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanelScroller.test.js However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { MultimediaViewer } = require( 'mmv' ); | ^ 2 | 3 | const MTH = {}; 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.testhelpers.js:1:30) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanelScroller.test.js:18:81) FAIL tests/qunit/resources/startup/mediawiki.test.js ● Test suite failed to run Cannot find module 'mediawiki.jqueryMsg' from 'tests/qunit/resources/startup/mediawiki.test.js' 1 | ( function () { > 2 | const jqueryMsg = require( 'mediawiki.jqueryMsg' ).test; | ^ 3 | QUnit.module( 'mediawiki' ); 4 | 5 | QUnit.test( 'Initial check', ( assert ) => { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/startup/mediawiki.test.js:2:20) at Object.<anonymous> (tests/qunit/resources/startup/mediawiki.test.js:156:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/init/targets/ve.init.mw.DesktopArticleTarget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.init.mw.DesktopArticleTarget', ve.test.utils.newMwEnvironment( { | ^ 9 | config: { 10 | wgVisualEditor: ve.extendObject( {}, mw.config.get( 'wgVisualEditor' ), { 11 | pageLanguageCode: 'he', at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/init/targets/ve.init.mw.DesktopArticleTarget.test.js:8:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.License.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.License.test.js' However, Jest was able to find: './mmv.model.Image.test.js' './mmv.model.License.test.js' './mmv.model.Repo.test.js' './mmv.model.TaskQueue.test.js' './mmv.model.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { License } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.model.License', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.License.test.js:18:21) FAIL extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.TaskQueue.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.TaskQueue.test.js' However, Jest was able to find: './mmv.model.Image.test.js' './mmv.model.License.test.js' './mmv.model.Repo.test.js' './mmv.model.TaskQueue.test.js' './mmv.model.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { TaskQueue } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.model.TaskQueue', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.TaskQueue.test.js:18:23) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/SpecialContributions.test.js ● Test suite failed to run ReferenceError: OO is not defined 32 | this.popup.connect( this, { toggle: 'onVisibilityChanged' } ); 33 | } > 34 | OO.inheritClass( BlockDetailsPopupButtonWidget, OO.ui.PopupButtonWidget ); | ^ 35 | 36 | /** 37 | * Promise holding resolved block details, reused between different popups on the same page. at Object.OO (extensions/CheckUser/modules/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.js:34:1) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/ipReveal.js:1:86) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/SpecialContributions.js:1:44) at Object.require (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/SpecialContributions.test.js:3:30) FAIL skins/Vector/tests/jest/skins.vector.js/dropdownMenus.test.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 157 | // Enhance previously added items. 158 | Array.prototype.forEach.call( > 159 | document.querySelectorAll( '.mw-list-item-js' ), | ^ 160 | ( item ) => { 161 | addPortletLinkHandler( item, { 162 | id: item.getAttribute( 'id' ) at Object.document (skins/Vector/resources/skins.vector.js/dropdownMenus.js:159:2) at Object.require (skins/Vector/tests/jest/skins.vector.js/dropdownMenus.test.js:3:35) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/annotations/ve.dm.MWInternalLinkAnnotation.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.dm.MWInternalLinkAnnotation', ve.test.utils.newMwEnvironment() ); | ^ 8 | 9 | QUnit.test( 'toDataElement', ( assert ) => { 10 | // The expected data depends on site configuration, so we need to generate the cases several times. at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/annotations/ve.dm.MWInternalLinkAnnotation.test.js:7:1) FAIL tests/qunit/resources/jquery.highlightText.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'jquery.highlightText', () => { | ^ 2 | 3 | QUnit.test.each( 'highlightText()', [ 4 | { at Object.<anonymous> (tests/qunit/resources/jquery.highlightText.test.js:1:45) FAIL tests/qunit/resources/mediawiki.widgets/MediaSearch/mediawiki.widgets.APIResultsQueue.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 'mediawiki.widgets.APIResultsQueue' ); | ^ 8 | 9 | ( function () { 10 | let itemCounter = 0; at Object.QUnit (tests/qunit/resources/mediawiki.widgets/MediaSearch/mediawiki.widgets.APIResultsQueue.test.js:7:1) FAIL tests/qunit/resources/mediawiki.util/accessKeyLabel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | ( function () { > 2 | QUnit.module( 'mediawiki.util: jquery.accessKeyLabel', QUnit.newMwEnvironment( { | ^ 3 | messages: { 4 | brackets: '[$1]', 5 | 'word-separator': ' ' at QUnit (tests/qunit/resources/mediawiki.util/accessKeyLabel.test.js:2:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.util/accessKeyLabel.test.js:106:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Api.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Api.test.js' However, Jest was able to find: './mmv.provider.Api.test.js' './mmv.provider.GuessedThumbnailInfo.test.js' './mmv.provider.Image.test.js' './mmv.provider.ImageInfo.test.js' './mmv.provider.ThumbnailInfo.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { Api } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.provider.Api', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Api.test.js:18:17) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/inspectors/ve.ui.FragmentInspector.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.ui.FragmentInspector (MW)', ve.test.utils.newMwEnvironment( { | ^ 8 | beforeEach() { 9 | // Mock XHR for mw.Api() 10 | this.server = this.sandbox.useFakeServer(); at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/inspectors/ve.ui.FragmentInspector.test.js:7:1) FAIL tests/qunit/resources/mediawiki.storage.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | const EXPIRY_PREFIX = '_EXPIRY_'; 3 | > 4 | QUnit.module( 'mediawiki.storage' ); | ^ 5 | 6 | QUnit.test( 'set/get(Object) with storage support', function ( assert ) { 7 | const data = {}, at QUnit (tests/qunit/resources/mediawiki.storage.test.js:4:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.storage.test.js:156:2) FAIL tests/jest/mediawiki.special.block/BlockLog.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/BlockLog.test.js:6:43) FAIL extensions/Cite/tests/qunit/ext.cite.referencePreviews/createReferenceGateway.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 10 | } 11 | > 12 | QUnit.module.if( 'ext.cite.referencePreviews#createReferenceGateway', | ^ 13 | mw.loader.getModuleNames().includes( 'ext.popups.main' ), 14 | { 15 | beforeEach: function () { at QUnit (extensions/Cite/tests/qunit/ext.cite.referencePreviews/createReferenceGateway.test.js:12:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ext.cite.referencePreviews/createReferenceGateway.test.js:181:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineTemplateWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlineTemplateWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor', ( assert ) => { 4 | const transclusion = new ve.dm.MWTransclusionModel(), at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineTemplateWidget.test.js:1:60) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.edit.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.edit', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.edit.test.js:1:50) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWImageModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.dm.MWImageModel' ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWImageModel.test.js:8:1) FAIL tests/qunit/resources/mediawiki.String.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.String', () => { | ^ 2 | const { byteLength } = require( 'mediawiki.String' ); 3 | 4 | QUnit.test.each( 'byteLength()', { at Object.<anonymous> (tests/qunit/resources/mediawiki.String.test.js:1:41) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/page-issues/parser.test.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 1 | ( function () { > 2 | const iconElement = document.createElement( 'div' ), | ^ 3 | pageIssuesParser = require( 'skins.minerva.scripts/page-issues/parser.js' ), 4 | extractMessage = pageIssuesParser.extract; 5 | at document (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/page-issues/parser.test.js:2:22) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/page-issues/parser.test.js:187:2) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.options.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.options', QUnit.newMwEnvironment(), ( hooks ) => { | ^ 2 | mw.config.set( { 3 | wgUserName: 'Foo' 4 | } ); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.options.test.js:1:79) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTemplateTitleInputWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 4 | } ) ); 5 | > 6 | QUnit.module( 've.ui.MWTemplateTitleInputWidget', ve.test.utils.newMwEnvironment( { | ^ 7 | messages: { 8 | // Force `templateDataInstalled` condition 9 | 'templatedata-doc-subpage': '(templatedata-doc-subpage)' at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTemplateTitleInputWidget.test.js:6:2) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/rest.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | let server; 6 | > 7 | QUnit.module( 'ext.checkUser.tempAccounts.rest', QUnit.newMwEnvironment( { | ^ 8 | beforeEach: function () { 9 | this.server = this.sandbox.useFakeServer(); 10 | this.server.respondImmediately = true; at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/rest.test.js:7:1) FAIL tests/qunit/resources/mediawiki.rcfilters/dm.FilterItem.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | /* eslint-disable camelcase */ 2 | ( function () { > 3 | QUnit.module( 'mediawiki.rcfilters - FilterItem' ); | ^ 4 | const rcfilters = require( 'mediawiki.rcfilters.filters.ui' ); 5 | 6 | QUnit.test( 'Initializing filter item', ( assert ) => { at QUnit (tests/qunit/resources/mediawiki.rcfilters/dm.FilterItem.test.js:3:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.rcfilters/dm.FilterItem.test.js:205:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.Document.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.dm.Document (MW)' ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.Document.test.js:8:1) FAIL skins/Vector/tests/jest/skins.vector.es6/main.test.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined > 1 | window.matchMedia = window.matchMedia || function () { | ^ 2 | return { 3 | matches: false, 4 | onchange: () => {} at Object.<anonymous> (skins/Vector/tests/jest/skins.vector.es6/main.test.js:1:54) FAIL tests/qunit/resources/mediawiki.cookie.test.js ● Test suite failed to run Cannot find module 'mediawiki.cookie' from 'tests/qunit/resources/mediawiki.cookie.test.js' 11 | secure: false 12 | }, > 13 | mwCookie = require( 'mediawiki.cookie' ), | ^ 14 | setDefaults = mwCookie.setDefaults, 15 | expiryDate = new Date(); 16 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.cookie.test.js:13:14) at Object.<anonymous> (tests/qunit/resources/mediawiki.cookie.test.js:183:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Image.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Image.test.js' However, Jest was able to find: './mmv.provider.Api.test.js' './mmv.provider.GuessedThumbnailInfo.test.js' './mmv.provider.Image.test.js' './mmv.provider.ImageInfo.test.js' './mmv.provider.ThumbnailInfo.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { ImageProvider } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.provider.Image', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Image.test.js:18:27) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/ipRevealUtils.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 4 | const autoRevealPreferenceName = 'checkuser-temporary-account-enable-auto-reveal'; 5 | > 6 | QUnit.module( 'ext.checkUser.tempAccounts.ipRevealUtils', QUnit.newMwEnvironment( { | ^ 7 | beforeEach() { 8 | this.dateNow = sinon.stub( Date, 'now' ); 9 | at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/ipRevealUtils.test.js:6:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/pages/ve.ui.MWParameterPage.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWParameterPage', ve.test.utils.newMwEnvironment ); | ^ 2 | 3 | [ 4 | [ undefined, '', ve.ui.MWLazyMultilineTextInputWidget ], at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/pages/ve.ui.MWParameterPage.test.js:1:72) FAIL tests/jest/mediawiki.special.block/UserLookup.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/UserLookup.test.js:6:60) FAIL tests/qunit/resources/mediawiki.visibleTimeout.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.visibleTimeout', QUnit.newMwEnvironment( { | ^ 2 | beforeEach: function () { 3 | // Document with just enough stuff to make the tests work. 4 | const listeners = []; at Object.<anonymous> (tests/qunit/resources/mediawiki.visibleTimeout.test.js:1:67) FAIL skins/Vector/tests/jest/stickyHeader.test.js ● Test suite failed to run Cannot find module 'mustache' from 'skins/Vector/tests/jest/stickyHeader.test.js' > 1 | const mustache = require( 'mustache' ); | ^ 2 | const fs = require( 'fs' ); 3 | const stickyHeaderTemplate = fs.readFileSync( 'includes/templates/StickyHeader.mustache', 'utf8' ); 4 | const buttonTemplate = fs.readFileSync( 'includes/templates/Button.mustache', 'utf8' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (skins/Vector/tests/jest/stickyHeader.test.js:1:39) FAIL tests/qunit/resources/startup/mw.Map.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | const arry = []; 6 | > 7 | QUnit.module( 'mw.Map' ); | ^ 8 | 9 | QUnit.test( 'Store simple string key', ( assert ) => { 10 | const conf = new mw.Map(); at QUnit (tests/qunit/resources/startup/mw.Map.test.js:7:2) at Object.<anonymous> (tests/qunit/resources/startup/mw.Map.test.js:130:2) FAIL extensions/CheckUser/tests/jest/components/IPAutoRevealOffDialog.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccounts/components/IPAutoRevealOffDialog.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 16 | } ) ); 17 | > 18 | const IPAutoRevealOffDialog = require( '../../../modules/ext.checkUser.tempAccounts/components/IPAutoRevealOffDialog.vue' ); | ^ 19 | const { nextTick } = require( 'vue' ); 20 | const utils = require( '@vue/test-utils' ); 21 | const { CdxDialog } = require( '@wikimedia/codex' ); at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/IPAutoRevealOffDialog.test.js:18:31) FAIL skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js ● isNightModeGadgetEnabled › should return false if no gadgets are installed ReferenceError: mw is not defined 9 | beforeEach( () => { 10 | // https://github.com/wikimedia/mw-node-qunit/pull/38 > 11 | mw.loader.getState = () => null; | ^ 12 | } ); 13 | 14 | it( 'should return false if no gadgets are installed', () => { at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:11:3) ● isNightModeGadgetEnabled › should return false if the gadgets are installed but not enabled ReferenceError: mw is not defined 9 | beforeEach( () => { 10 | // https://github.com/wikimedia/mw-node-qunit/pull/38 > 11 | mw.loader.getState = () => null; | ^ 12 | } ); 13 | 14 | it( 'should return false if no gadgets are installed', () => { at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:11:3) ● isNightModeGadgetEnabled › should return true if the gadgets are enabled ReferenceError: mw is not defined 9 | beforeEach( () => { 10 | // https://github.com/wikimedia/mw-node-qunit/pull/38 > 11 | mw.loader.getState = () => null; | ^ 12 | } ); 13 | 14 | it( 'should return false if no gadgets are installed', () => { at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:11:3) ● disableNightModeForGadget › should disable night mode The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 33 | describe( 'disableNightModeForGadget', () => { 34 | beforeEach( () => { > 35 | document.documentElement.classList.remove( 'skin-theme-clientpref--excluded' ); | ^ 36 | document.documentElement.classList.remove( 'skin-theme-clientpref-night' ); 37 | document.documentElement.classList.remove( 'skin-theme-clientpref-os' ); 38 | } ); at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:35:3) ● disableNightModeForGadget › should disable automatic mode The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 33 | describe( 'disableNightModeForGadget', () => { 34 | beforeEach( () => { > 35 | document.documentElement.classList.remove( 'skin-theme-clientpref--excluded' ); | ^ 36 | document.documentElement.classList.remove( 'skin-theme-clientpref-night' ); 37 | document.documentElement.classList.remove( 'skin-theme-clientpref-os' ); 38 | } ); at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:35:3) ● disableNightModeForGadget › should add the excluded class The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 33 | describe( 'disableNightModeForGadget', () => { 34 | beforeEach( () => { > 35 | document.documentElement.classList.remove( 'skin-theme-clientpref--excluded' ); | ^ 36 | document.documentElement.classList.remove( 'skin-theme-clientpref-night' ); 37 | document.documentElement.classList.remove( 'skin-theme-clientpref-os' ); 38 | } ); at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:35:3) ● alterDisableLink › should exit early if the gadget names are empty ReferenceError: mw is not defined 67 | 68 | it( 'should exit early if the gadget names are empty', () => { > 69 | jest.spyOn( mw, 'msg' ).mockImplementation( () => '' ); | ^ 70 | 71 | const p = document.createElement( 'p' ); 72 | const a = document.createElement( 'a' ); at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:69:15) ● alterDisableLink › should leave the surrounding element unaltered The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 83 | 84 | it( 'should leave the surrounding element unaltered', () => { > 85 | const p = document.createElement( 'p' ); | ^ 86 | const a = document.createElement( 'a' ); 87 | p.appendChild( a ); 88 | at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:85:13) ● alterDisableLink › should strip the title and href attributes The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 95 | 96 | it( 'should strip the title and href attributes', () => { > 97 | const p = document.createElement( 'p' ); | ^ 98 | const a = document.createElement( 'a' ); 99 | p.appendChild( a ); 100 | at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:97:13) ● alterDisableLink › should make the link display inline The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 109 | 110 | it( 'should make the link display inline', () => { > 111 | const p = document.createElement( 'p' ); | ^ 112 | const a = document.createElement( 'a' ); 113 | p.appendChild( a ); 114 | at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:111:13) ● alterExclusionMessage › should remove the existing text from the notice ReferenceError: mw is not defined 123 | describe( 'alterExclusionMessage', () => { 124 | beforeEach( () => { > 125 | jest.spyOn( mw.loader, 'using' ).mockImplementation( () => ( { | ^ 126 | then: ( fn ) => fn() 127 | } ) ); 128 | at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:125:15) ● alterExclusionMessage › should not target other client prefs ReferenceError: mw is not defined 123 | describe( 'alterExclusionMessage', () => { 124 | beforeEach( () => { > 125 | jest.spyOn( mw.loader, 'using' ).mockImplementation( () => ( { | ^ 126 | then: ( fn ) => fn() 127 | } ) ); 128 | at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:125:15) FAIL extensions/CheckUser/tests/jest/components/app.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/App.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 6 | } ), { virtual: true } ); 7 | > 8 | const App = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/App.vue' ), | ^ 9 | utils = require( '@vue/test-utils' ), 10 | { waitFor } = require( '../utils.js' ); 11 | at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/app.test.js:8:13) FAIL extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Repo.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Repo.test.js' However, Jest was able to find: './mmv.model.Image.test.js' './mmv.model.License.test.js' './mmv.model.Repo.test.js' './mmv.model.TaskQueue.test.js' './mmv.model.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { Repo, ForeignApiRepo, ForeignDbRepo } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.model.Repo', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Repo.test.js:18:49) FAIL tests/qunit/resources/jquery.textSelection.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'jquery.textSelection', () => { | ^ 2 | const sig = { 3 | pre: '--~~~~' 4 | }; at Object.<anonymous> (tests/qunit/resources/jquery.textSelection.test.js:1:45) FAIL extensions/DiscussionTools/tests/qunit/modifier.test.js ● Test suite failed to run Cannot find module 'ext.discussionTools.init' from 'extensions/DiscussionTools/tests/qunit/testUtils.js' Require stack: extensions/DiscussionTools/tests/qunit/testUtils.js extensions/DiscussionTools/tests/qunit/modifier.test.js > 1 | const utils = require( 'ext.discussionTools.init' ).utils; | ^ 2 | 3 | module.exports = {}; 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (extensions/DiscussionTools/tests/qunit/testUtils.js:1:58) at Object.<anonymous> (extensions/DiscussionTools/tests/qunit/modifier.test.js:2:41) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingDialogStepper.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingStepper.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | 'use strict'; 2 | > 3 | const TempAccountsOnboardingStepper = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingStepper.vue' ), | ^ 4 | utils = require( '@vue/test-utils' ); 5 | 6 | const renderComponent = ( props ) => { at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/tempAccountsOnboardingDialogStepper.test.js:3:39) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.permission.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.permission.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { Permission } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'Permission', QUnit.newMwEnvironment( { 21 | beforeEach: function () { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.permission.test.js:18:24) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.test.js ● Test suite failed to run ReferenceError: OO is not defined 32 | this.popup.connect( this, { toggle: 'onVisibilityChanged' } ); 33 | } > 34 | OO.inheritClass( BlockDetailsPopupButtonWidget, OO.ui.PopupButtonWidget ); | ^ 35 | 36 | /** 37 | * Promise holding resolved block details, reused between different popups on the same page. at Object.OO (extensions/CheckUser/modules/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.js:34:1) at Object.require (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.test.js:3:39) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.download.pane.test.js ● Test suite failed to run Cannot find module 'mmv.ui.reuse' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.download.pane.test.js' 16 | */ 17 | > 18 | const { Download: DownloadPane, Utils } = require( 'mmv.ui.reuse' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.download.pane', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.download.pane.test.js:18:43) FAIL tests/qunit/resources/mediawiki.api/mediawiki.rest.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.rest', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.rest.test.js:1:46) FAIL tests/jest/mediawiki.special.block/ExpiryField.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/ExpiryField.test.js:5:29) FAIL tests/qunit/resources/mediawiki.widgets/UserInputWidget/mediawiki.widgets.UserInputWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | */ 4 | > 5 | QUnit.module( 'mediawiki.widgets.UserInputWidget' ); | ^ 6 | 7 | ( function () { 8 | const widgetWithDefaults = new mw.widgets.UserInputWidget( {} ); at Object.QUnit (tests/qunit/resources/mediawiki.widgets/UserInputWidget/mediawiki.widgets.UserInputWidget.test.js:5:1) FAIL tests/qunit/resources/mediawiki.cldr.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 60 | }; 61 | > 62 | QUnit.module( 'mediawiki.cldr', QUnit.newMwEnvironment() ); | ^ 63 | 64 | function pluralTest( langCode, tests ) { 65 | QUnit.test( 'Plural Test for ' + langCode, ( assert ) => { at QUnit (tests/qunit/resources/mediawiki.cldr.test.js:62:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.cldr.test.js:83:2) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceEditPanel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | 3 | ( function () { > 4 | QUnit.module( 've.ui.MWReferenceEditPanel (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 5 | 6 | function getSimpleNode( doc ) { 7 | const node = new ve.dm.MWReferenceNode( { at QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceEditPanel.test.js:4:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceEditPanel.test.js:105:2) FAIL tests/qunit/resources/mediawiki.deflate.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.deflate', () => { | ^ 2 | let seed = 1234567890; 3 | function getPseudoRandom() { 4 | seed = seed * 16807 % 2147483646; at Object.<anonymous> (tests/qunit/resources/mediawiki.deflate.test.js:1:42) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/pages/ve.ui.MWAddParameterPage.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWAddParameterPage', ve.test.utils.newMwEnvironment() ); | ^ 2 | 3 | QUnit.test( 'Input event handlers', ( assert ) => { 4 | const transclusion = new ve.dm.MWTransclusionModel(), at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/pages/ve.ui.MWAddParameterPage.test.js:1:77) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlineWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor', ( assert ) => { 4 | const widget = new ve.ui.MWTransclusionOutlineWidget(); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineWidget.test.js:1:52) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.MWGroupReferences.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | 3 | ( function () { > 4 | QUnit.module( 've.dm.MWGroupReferences (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 5 | 6 | const doc = ve.dm.citeExample.createExampleDocument( 'references' ); 7 | const docRefs = ve.dm.MWDocumentReferences.static.refsForDoc( doc ); at QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWGroupReferences.test.js:4:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWGroupReferences.test.js:126:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/actions/ve.ui.MWLinkAction.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.ui.MWLinkAction' ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/actions/ve.ui.MWLinkAction.test.js:8:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.utils.test.js ● Test suite failed to run Cannot find module 'mmv.ui.reuse' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.utils.test.js' 16 | */ 17 | > 18 | const { Utils } = require( 'mmv.ui.reuse' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.reuse.utils', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.utils.test.js:18:19) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.category.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.category', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.category.test.js:1:54) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferenceModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.dm.MWReferenceModel (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 8 | 9 | /* Tests */ 10 | at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferenceModel.test.js:7:1) FAIL skins/Vector/tests/jest/restSearchClient.test.js ● restApiSearchClient › 2 results The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson [as fetchByTitle] (skins/Vector/resources/skins.vector.search/restSearchClient.js:104:19) at Object.fetchByTitle (skins/Vector/tests/jest/restSearchClient.test.js:58:77) ● restApiSearchClient › 0 results The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson [as fetchByTitle] (skins/Vector/resources/skins.vector.search/restSearchClient.js:104:19) at Object.fetchByTitle (skins/Vector/tests/jest/restSearchClient.test.js:89:77) ● restApiSearchClient › network error The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson [as fetchByTitle] (skins/Vector/resources/skins.vector.search/restSearchClient.js:104:19) at Object.fetchByTitle (skins/Vector/tests/jest/restSearchClient.test.js:111:65) FAIL tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js ● restApiSearchClient › 2 results The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson [as fetchByTitle] (resources/src/mediawiki.skinning.typeaheadSearch/restSearchClient.js:104:19) at Object.fetchByTitle (tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js:58:77) ● restApiSearchClient › 0 results The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson [as fetchByTitle] (resources/src/mediawiki.skinning.typeaheadSearch/restSearchClient.js:104:19) at Object.fetchByTitle (tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js:89:77) ● restApiSearchClient › network error The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson [as fetchByTitle] (resources/src/mediawiki.skinning.typeaheadSearch/restSearchClient.js:104:19) at Object.fetchByTitle (tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js:111:65) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | 7 | { > 8 | QUnit.module( 've.dm.MWTransclusionModel', ve.test.utils.newMwEnvironment( { | ^ 9 | beforeEach() { 10 | // Mock XHR for mw.Api() 11 | this.server = this.sandbox.useFakeServer(); at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionModel.test.js:8:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { StripeButtons } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.StripeButtons', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js:18:27) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.progressBar.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.progressBar.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { ProgressBar } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.ProgressBar', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.progressBar.test.js:18:25) FAIL skins/Vector/tests/jest/skins.vector.legacy.js/portlets.test.js ● Test suite failed to run Cannot find module 'mustache' from 'skins/Vector/tests/jest/skins.vector.legacy.js/portlets.test.js' 1 | const portlets = require( '../../../resources/skins.vector.legacy.js/portlets.js' ); > 2 | const mustache = require( 'mustache' ); | ^ 3 | const fs = require( 'fs' ); 4 | const menuTemplate = fs.readFileSync( 'includes/templates/LegacyMenu.mustache', 'utf8' ); 5 | const menuContentsTemplate = fs.readFileSync( 'includes/templates/MenuContents.mustache', 'utf8' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (skins/Vector/tests/jest/skins.vector.legacy.js/portlets.test.js:2:18) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.Transaction.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 8 | */ 9 | > 10 | QUnit.module( 've.dm.Transaction (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 11 | 12 | // FIXME: Duplicates test runner; should be using a data provider 13 | QUnit.test( 'newFromDocumentInsertion with references', ( assert ) => { at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.Transaction.test.js:10:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/actions/ve.ui.FormatAction.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.ui.FormatAction (MW)', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | QUnit.test.each( 'convert (MW-specific types)', 11 | [ at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/actions/ve.ui.FormatAction.test.js:8:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.ClipboardHandler.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.ce.ClipboardHandler (MW)', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.ClipboardHandler.test.js:8:1) FAIL extensions/Cite/tests/qunit/ext.cite.referencePreviews/isReferencePreviewsEnabled.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 24 | const options = { get: () => '1' }; 25 | > 26 | QUnit.module.if( 'ext.cite.referencePreviews#isReferencePreviewsEnabled', | ^ 27 | mw.loader.getModuleNames().includes( 'ext.popups.main' ) ); 28 | 29 | QUnit.test( 'relevant combinations of anonymous flags', ( assert ) => { at QUnit (extensions/Cite/tests/qunit/ext.cite.referencePreviews/isReferencePreviewsEnabled.test.js:26:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ext.cite.referencePreviews/isReferencePreviewsEnabled.test.js:110:2) FAIL extensions/Cite/tests/qunit/ext.cite.referencePreviews/renderer.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | const previewTypes = { TYPE_REFERENCE: 'reference' }; 6 | > 7 | QUnit.module.if( 'ext.cite.referencePreviews#renderer', | ^ 8 | mw.loader.getModuleNames().includes( 'ext.popups.main' ), 9 | { 10 | before() { at QUnit (extensions/Cite/tests/qunit/ext.cite.referencePreviews/renderer.test.js:7:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ext.cite.referencePreviews/renderer.test.js:89:2) FAIL tests/qunit/resources/mediawiki.widgets/Table/mediawiki.widgets.TableWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | */ 4 | > 5 | QUnit.module( 'mediawiki.widgets.TableWidget' ); | ^ 6 | 7 | ( function () { 8 | const widgetA = new mw.widgets.TableWidget( { at Object.QUnit (tests/qunit/resources/mediawiki.widgets/Table/mediawiki.widgets.TableWidget.test.js:5:1) FAIL skins/Vector/tests/jest/popupNotification.test.js ● Popup Notification › add TypeError: Cannot set properties of undefined (setting 'matchMedia') 23 | describe( 'Popup Notification', () => { 24 | beforeEach( () => { > 25 | global.window.matchMedia = jest.fn( () => ( {} ) ); | ^ 26 | document.body.style = 'direction: ltr'; 27 | jest.spyOn( mw.loader, 'using' ) 28 | .mockImplementation( () => Promise.resolve() ); at Object.<anonymous> (skins/Vector/tests/jest/popupNotification.test.js:25:27) ● Popup Notification › hide TypeError: Cannot set properties of undefined (setting 'matchMedia') 23 | describe( 'Popup Notification', () => { 24 | beforeEach( () => { > 25 | global.window.matchMedia = jest.fn( () => ( {} ) ); | ^ 26 | document.body.style = 'direction: ltr'; 27 | jest.spyOn( mw.loader, 'using' ) 28 | .mockImplementation( () => Promise.resolve() ); at Object.<anonymous> (skins/Vector/tests/jest/popupNotification.test.js:25:27) ● Popup Notification › show TypeError: Cannot set properties of undefined (setting 'matchMedia') 23 | describe( 'Popup Notification', () => { 24 | beforeEach( () => { > 25 | global.window.matchMedia = jest.fn( () => ( {} ) ); | ^ 26 | document.body.style = 'direction: ltr'; 27 | jest.spyOn( mw.loader, 'using' ) 28 | .mockImplementation( () => Promise.resolve() ); at Object.<anonymous> (skins/Vector/tests/jest/popupNotification.test.js:25:27) ● Popup Notification › hideAll TypeError: Cannot set properties of undefined (setting 'matchMedia') 23 | describe( 'Popup Notification', () => { 24 | beforeEach( () => { > 25 | global.window.matchMedia = jest.fn( () => ( {} ) ); | ^ 26 | document.body.style = 'direction: ltr'; 27 | jest.spyOn( mw.loader, 'using' ) 28 | .mockImplementation( () => Promise.resolve() ); at Object.<anonymous> (skins/Vector/tests/jest/popupNotification.test.js:25:27) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWWikitextStringTransferHandler.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 8 | */ 9 | > 10 | QUnit.module( 've.ui.MWWikitextStringTransferHandler (Cite)', ve.test.utils.newMwEnvironment( { | ^ 11 | beforeEach: function () { 12 | // Mock XHR for mw.Api() 13 | this.server = this.sandbox.useFakeServer(); at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWWikitextStringTransferHandler.test.js:10:1) FAIL extensions/DiscussionTools/tests/qunit/parser.test.js ● Test suite failed to run Cannot find module 'ext.discussionTools.init' from 'extensions/DiscussionTools/tests/qunit/testUtils.js' Require stack: extensions/DiscussionTools/tests/qunit/testUtils.js extensions/DiscussionTools/tests/qunit/parser.test.js > 1 | const utils = require( 'ext.discussionTools.init' ).utils; | ^ 2 | 3 | module.exports = {}; 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (extensions/DiscussionTools/tests/qunit/testUtils.js:1:58) at Object.require (extensions/DiscussionTools/tests/qunit/parser.test.js:3:14) FAIL skins/Vector/tests/jest/skins.vector.js/tables.test.js ● tables › wraps table with div The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 3 | describe( 'tables', () => { 4 | test( 'wraps table with div', () => { > 5 | document.body.innerHTML = ` | ^ 6 | <div class="mw-parser-output"> 7 | <table class="wikitable"> 8 | <tbody><tr><th>table table table</th></tr></tbody> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:5:3) ● tables › wraps multiple table with div The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 16 | 17 | test( 'wraps multiple table with div', () => { > 18 | document.body.innerHTML = ` | ^ 19 | <div class="mw-parser-output"> 20 | <table class="wikitable"> 21 | <tbody><tr><th>table table table</th></tr></tbody> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:18:3) ● tables › doesnt wrap nested tables The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 36 | 37 | test( 'doesnt wrap nested tables', () => { > 38 | document.body.innerHTML = ` | ^ 39 | <div class="mw-parser-output"> 40 | <table class="wikitable"> 41 | <tbody> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:38:3) ● tables › doesnt wrap tables that are not wikitables The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 52 | 53 | test( 'doesnt wrap tables that are not wikitables', () => { > 54 | document.body.innerHTML = ` | ^ 55 | <div class="mw-parser-output"> 56 | <table> 57 | <tbody> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:54:3) ● tables › doesnt wrap tables that already have noresize The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 68 | 69 | test( 'doesnt wrap tables that already have noresize', () => { > 70 | document.body.innerHTML = ` | ^ 71 | <div class="mw-parser-output"> 72 | <div class="noresize"> 73 | <table class="wikitable"> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:70:3) ● tables › doesnt wrap tables that are already wrapped The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 85 | 86 | test( 'doesnt wrap tables that are already wrapped', () => { > 87 | document.body.innerHTML = ` | ^ 88 | <div class="mw-parser-output"> 89 | <div> 90 | <table class="wikitable"> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:87:3) ● tables › doesnt wrap floated tables The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 102 | 103 | test( 'doesnt wrap floated tables', () => { > 104 | document.body.innerHTML = ` | ^ 105 | <div class="mw-parser-output"> 106 | <table class="wikitable" style="float:right"> 107 | <tbody> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:104:3) FAIL extensions/Cite/tests/qunit/ext.cite.highlighting.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | /* eslint-disable no-jquery/no-global-selector */ 4 | ( function () { > 5 | QUnit.module( 'ext.cite.highlighting (Cite)', { | ^ 6 | beforeEach: function () { 7 | const $content = $( ` 8 | <div> at QUnit (extensions/Cite/tests/qunit/ext.cite.highlighting.test.js:5:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ext.cite.highlighting.test.js:67:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/dialogs/ve.ui.MWTransclusionDialog.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | 7 | { > 8 | QUnit.module( 've.ui.MWTransclusionDialog', ve.test.utils.newMwEnvironment( { | ^ 9 | config: { 10 | // Set config variable to activate new sidebar feature 11 | // TODO: remove this when sidebar feature will be default at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/dialogs/ve.ui.MWTransclusionDialog.test.js:8:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.SurfaceFragment.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.dm.SurfaceFragment (MW)', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.SurfaceFragment.test.js:8:1) FAIL skins/MinervaNeue/tests/jest/skins.minerva.scripts/reportIfNightModeWasDisabledOnPage.test.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 3 | '../../../resources/skins.minerva.scripts/reportIfNightModeWasDisabledOnPage.js' 4 | ); > 5 | const nightModeDisabledDoc = document.createElement( 'html' ); | ^ 6 | nightModeDisabledDoc.setAttribute( 'class', 'skin-night-mode-page-disabled' ); 7 | 8 | const userOptionsEnabled = new Map(); at Object.document (skins/MinervaNeue/tests/jest/skins.minerva.scripts/reportIfNightModeWasDisabledOnPage.test.js:5:30) FAIL tests/qunit/resources/startup/clientprefs.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'startup/clientprefs', () => { | ^ 2 | // See /resources/src/startup/clientprefs.js 3 | const clientprefs = mw.clientprefs; 4 | at Object.<anonymous> (tests/qunit/resources/startup/clientprefs.test.js:1:44) FAIL tests/jest/mediawiki.special.block/util.test.js ● util › sanitizeRange (IPv4 range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv4 range 2) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv4 large range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv4 intermediate range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv4 silly range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv4 non-range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 range 2) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 large range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 intermediate range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 silly range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 non range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › formatTimestamp ReferenceError: mw is not defined 92 | 93 | it.each( formatTimestampCases )( 'formatTimestamp', ( { input, expected } ) => { > 94 | mw.util.isInfinity = jest.fn().mockReturnValue( input === 'infinity' ); | ^ 95 | expect( util.formatTimestamp( input ) ).toBe( expected ); 96 | } ); 97 | } ); at mw (tests/jest/mediawiki.special.block/util.test.js:94:3) ● util › formatTimestamp ReferenceError: mw is not defined 92 | 93 | it.each( formatTimestampCases )( 'formatTimestamp', ( { input, expected } ) => { > 94 | mw.util.isInfinity = jest.fn().mockReturnValue( input === 'infinity' ); | ^ 95 | expect( util.formatTimestamp( input ) ).toBe( expected ); 96 | } ); 97 | } ); at mw (tests/jest/mediawiki.special.block/util.test.js:94:3) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceSearchWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | 3 | ( function () { > 4 | QUnit.module( 've.ui.MWReferenceSearchWidget (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 5 | 6 | function getDocRefsMock( hasNode ) { 7 | const listKey = 'literal/foo'; at QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceSearchWidget.test.js:4:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceSearchWidget.test.js:85:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/nodes/ve.dm.MWTransclusionNode.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.dm.MWTransclusionNode' ); | ^ 9 | 10 | QUnit.test.each( 'getWikitext', { 11 | 'mix of numbered and named parameters': { at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/nodes/ve.dm.MWTransclusionNode.test.js:8:1) FAIL skins/Vector/tests/jest/skins.vector.js/portlets.test.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 157 | // Enhance previously added items. 158 | Array.prototype.forEach.call( > 159 | document.querySelectorAll( '.mw-list-item-js' ), | ^ 160 | ( item ) => { 161 | addPortletLinkHandler( item, { 162 | id: item.getAttribute( 'id' ) at Object.document (skins/Vector/resources/skins.vector.js/dropdownMenus.js:159:2) at Object.<anonymous> (skins/Vector/resources/skins.vector.js/portlets.js:1:54) at Object.<anonymous> (skins/Vector/tests/jest/skins.vector.js/portlets.test.js:1:77) FAIL tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js ● abort() using AbortController › Aborting an unfinished request throws an AbortError The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:12:28) ● abort() using AbortController › Aborting an unfinished request throws an AbortError expect.assertions(1) Expected one assertion to be called but received zero assertion calls. 8 | describe( 'abort() using AbortController', () => { 9 | test( 'Aborting an unfinished request throws an AbortError', async () => { > 10 | expect.assertions( 1 ); | ^ 11 | 12 | const { abort, fetch } = fetchJson( url ); 13 | at Object.assertions (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:10:10) ● fetch() using window.fetch › 200 without init param passed The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:54:21) ● fetch() using window.fetch › 200 with init param passed The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:66:21) ● fetch() using window.fetch › 404 response The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:82:21) ● fetch() using window.fetch › 404 response expect.assertions(1) Expected one assertion to be called but received zero assertion calls. 79 | 80 | test( '404 response', async () => { > 81 | expect.assertions( 1 ); | ^ 82 | const { fetch } = fetchJson( '//en.wikipedia.org/doesNotExist' ); 83 | 84 | await expect( fetch ) at Object.assertions (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:81:10) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.ipInfo.hooks/ext.ipinfo.infobox.widget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | const addSpecialGlobalContributionsLink = require( '../../../modules/ext.checkUser.ipInfo.hooks/infobox.js' ); 3 | > 4 | QUnit.module( 'ext.checkUser.ipInfo.hooks', QUnit.newMwEnvironment( { | ^ 5 | beforeEach: function () { 6 | // simulate setting wgAutoCreateTempUser to { enabled: true, matchPattern: '~$1' } 7 | // (setting it in mw.config has no effect, so we need to at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser.ipInfo.hooks/ext.ipinfo.infobox.widget.test.js:4:1) FAIL tests/qunit/resources/mediawiki.base/track.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.base/track', () => { | ^ 2 | 3 | QUnit.test( 'track', ( assert ) => { 4 | const sequence = []; at Object.<anonymous> (tests/qunit/resources/mediawiki.base/track.test.js:1:45) FAIL tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignApi.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.ForeignApi', ( hooks ) => { | ^ 2 | const CoreForeignApi = require( 'mediawiki.ForeignApi.core' ).ForeignApi; 3 | 4 | hooks.beforeEach( function () { at Object.<anonymous> (tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignApi.test.js:1:52) FAIL skins/Vector/tests/jest/fetch.test.js ● abort() using AbortController › Aborting an unfinished request throws an AbortError The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson (skins/Vector/tests/jest/fetch.test.js:12:28) ● abort() using AbortController › Aborting an unfinished request throws an AbortError expect.assertions(1) Expected one assertion to be called but received zero assertion calls. 8 | describe( 'abort() using AbortController', () => { 9 | test( 'Aborting an unfinished request throws an AbortError', async () => { > 10 | expect.assertions( 1 ); | ^ 11 | 12 | const { abort, fetch } = fetchJson( url ); 13 | at Object.assertions (skins/Vector/tests/jest/fetch.test.js:10:10) ● fetch() using window.fetch › 200 without init param passed The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson (skins/Vector/tests/jest/fetch.test.js:54:21) ● fetch() using window.fetch › 200 with init param passed The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson (skins/Vector/tests/jest/fetch.test.js:66:21) ● fetch() using window.fetch › 404 response The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson (skins/Vector/tests/jest/fetch.test.js:82:21) ● fetch() using window.fetch › 404 response expect.assertions(1) Expected one assertion to be called but received zero assertion calls. 79 | 80 | test( '404 response', async () => { > 81 | expect.assertions( 1 ); | ^ 82 | const { fetch } = fetchJson( '//en.wikipedia.org/doesNotExist' ); 83 | 84 | await expect( fetch ) at Object.assertions (skins/Vector/tests/jest/fetch.test.js:81:10) FAIL skins/Vector/tests/jest/skins.vector.clientPreferences.test.js ● clientPreferences › render empty The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 4 | describe( 'clientPreferences', () => { 5 | beforeEach( () => { > 6 | document.body.innerHTML = ''; | ^ 7 | cp = document.createElement( 'div' ); 8 | cp.id = 'cp'; 9 | document.body.appendChild( cp ); at Object.document (skins/Vector/tests/jest/skins.vector.clientPreferences.test.js:6:3) ● clientPreferences › render font size The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 4 | describe( 'clientPreferences', () => { 5 | beforeEach( () => { > 6 | document.body.innerHTML = ''; | ^ 7 | cp = document.createElement( 'div' ); 8 | cp.id = 'cp'; 9 | document.body.appendChild( cp ); at Object.document (skins/Vector/tests/jest/skins.vector.clientPreferences.test.js:6:3) ● clientPreferences › doesnt render exclusion notice if the msg key doesnt exist The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 4 | describe( 'clientPreferences', () => { 5 | beforeEach( () => { > 6 | document.body.innerHTML = ''; | ^ 7 | cp = document.createElement( 'div' ); 8 | cp.id = 'cp'; 9 | document.body.appendChild( cp ); at Object.document (skins/Vector/tests/jest/skins.vector.clientPreferences.test.js:6:3) ● clientPreferences › render toggle The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 4 | describe( 'clientPreferences', () => { 5 | beforeEach( () => { > 6 | document.body.innerHTML = ''; | ^ 7 | cp = document.createElement( 'div' ); 8 | cp.id = 'cp'; 9 | document.body.appendChild( cp ); at Object.document (skins/Vector/tests/jest/skins.vector.clientPreferences.test.js:6:3) FAIL tests/qunit/resources/mediawiki.base/html.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.base/html', () => { | ^ 2 | 3 | QUnit.test( 'escape', ( assert ) => { 4 | assert.throws( at Object.<anonymous> (tests/qunit/resources/mediawiki.base/html.test.js:1:44) FAIL tests/qunit/resources/testrunner.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'testrunner', () => { | ^ 2 | QUnit.test( 'assert.htmlEqual', ( assert ) => { 3 | assert.htmlEqual( 4 | '<div><p class="some classes" data-length="10">Child paragraph with <a href="http://example.com">A link</a></p>Regular text<span>A span</span></div>', at Object.<anonymous> (tests/qunit/resources/testrunner.test.js:1:35) FAIL tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignRest.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.ForeignRest', ( hooks ) => { | ^ 2 | const CoreForeignApi = require( 'mediawiki.ForeignApi.core' ).ForeignApi; 3 | const CoreForeignRest = require( 'mediawiki.ForeignApi.core' ).ForeignRest; 4 | at Object.<anonymous> (tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignRest.test.js:1:53) FAIL tests/qunit/resources/startup/mw.requestIdleCallback.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | ( function () { > 2 | QUnit.module( 'mw.requestIdleCallback', QUnit.newMwEnvironment( { | ^ 3 | beforeEach: function () { 4 | const clock = this.clock = this.sandbox.useFakeTimers(); 5 | at QUnit (tests/qunit/resources/startup/mw.requestIdleCallback.test.js:2:2) at Object.<anonymous> (tests/qunit/resources/startup/mw.requestIdleCallback.test.js:105:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/layouts/ve.ui.MWTwoPaneTransclusionDialogLayout.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTwoPaneTransclusionDialogLayout', ve.test.utils.newMwEnvironment() ); | ^ 2 | 3 | const createLayout = function () { 4 | return new ve.ui.MWTwoPaneTransclusionDialogLayout( { continuous: true } ); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/layouts/ve.ui.MWTwoPaneTransclusionDialogLayout.test.js:1:92) FAIL vendor/wikimedia/parsoid/bin/domdiff.test.js ● Test suite failed to run Cannot find module './lib/utils/promise.js' from 'vendor/wikimedia/parsoid/core-upgrade.js' Require stack: vendor/wikimedia/parsoid/core-upgrade.js vendor/wikimedia/parsoid/bin/domdiff.test.js 2 | 3 | // Register prfun's Promises with node-pn > 4 | var Promise = require('./lib/utils/promise.js'); | ^ 5 | require('pn/_promise')(Promise); // This only needs to be done once. 6 | 7 | // Comments below annotate the highest lts version of node for which the at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (vendor/wikimedia/parsoid/core-upgrade.js:4:15) at Object.require (vendor/wikimedia/parsoid/bin/domdiff.test.js:5:1) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ce.ClipboardHandler.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.ce.ClipboardHandler (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ce.ClipboardHandler.test.js:8:1) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/generateData.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const generateData = require( '../../../../../modules/ext.checkUser/checkuser/checkUserHelper/generateData.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.generateData', QUnit.newMwEnvironment() ); | ^ 6 | 7 | QUnit.test( 'Test that generateData returns the expected data', ( assert ) => { 8 | const cases = require( './cases/generateData.json' ); at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/generateData.test.js:5:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.truncatableTextField.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.truncatableTextField.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { TruncatableTextField } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.TruncatableTextField', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.truncatableTextField.test.js:18:34) FAIL extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.test.js' However, Jest was able to find: './mmv.model.Image.test.js' './mmv.model.License.test.js' './mmv.model.Repo.test.js' './mmv.model.TaskQueue.test.js' './mmv.model.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { Thumbnail, ThumbnailWidth } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.model', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.test.js:18:39) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/ve.ui.DiffElement.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.ui.DiffElement (MW)', ve.test.utils.newMwEnvironment() ); | ^ 8 | 9 | QUnit.test.each( 'Diffing', 10 | [ at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/ve.ui.DiffElement.test.js:7:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.description.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.description.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { Description } = require( 'mmv' ); | ^ 2 | 3 | QUnit.module( 'mmv.ui.description', QUnit.newMwEnvironment() ); 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.description.test.js:1:25) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineParameterSelectWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlineParameterSelectWidget' ); | ^ 2 | 3 | QUnit.test( 'static item constructor', ( assert ) => { 4 | const item = ve.ui.MWTransclusionOutlineParameterSelectWidget.static.createItem( { data: 'p1' } ); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineParameterSelectWidget.test.js:1:67) FAIL tests/qunit/resources/mediawiki.base/errorLogger.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.base/errorLogger', () => { | ^ 2 | 3 | QUnit.test( 'installGlobalHandler', function ( assert ) { 4 | const errorMessage = 'Foo'; at Object.<anonymous> (tests/qunit/resources/mediawiki.base/errorLogger.test.js:1:51) FAIL tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js ● instrumentation › addWprovToSearchResultUrls without offset ReferenceError: location is not defined 57 | return results.map( ( result, index ) => { 58 | if ( result.url ) { > 59 | const url = new URL( result.url, location.href ); | ^ 60 | url.searchParams.set( 'wprov', getWprovFromResultIndex( index + offset ) ); 61 | result = Object.assign( {}, result, { url: url.toString() } ); 62 | } at location (resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js:59:37) at Array.map (<anonymous>) at Object.map [as addWprovToSearchResultUrls] (resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js:57:17) at Object.addWprovToSearchResultUrls (tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js:40:27) ● instrumentation › addWprovToSearchResultUrls with offset ReferenceError: location is not defined 57 | return results.map( ( result, index ) => { 58 | if ( result.url ) { > 59 | const url = new URL( result.url, location.href ); | ^ 60 | url.searchParams.set( 'wprov', getWprovFromResultIndex( index + offset ) ); 61 | result = Object.assign( {}, result, { url: url.toString() } ); 62 | } at location (resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js:59:37) at Array.map (<anonymous>) at Object.map [as addWprovToSearchResultUrls] (resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js:57:17) at Object.addWprovToSearchResultUrls (tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js:79:27) FAIL tests/jest/mediawiki.special.block/NamespacesField.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/NamespacesField.test.js:5:29) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.watch.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.watch', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.watch.test.js:1:51) FAIL skins/Vector/tests/jest/instrumentation.test.js ● instrumentation › addWprovToSearchResultUrls without offset ReferenceError: location is not defined 63 | return results.map( ( result, index ) => { 64 | if ( result.url ) { > 65 | const url = new URL( result.url, location.href ); | ^ 66 | url.searchParams.set( 'wprov', getWprovFromResultIndex( index + offset ) ); 67 | result = Object.assign( {}, result, { url: url.toString() } ); 68 | } at location (skins/Vector/resources/skins.vector.search/instrumentation.js:65:37) at Array.map (<anonymous>) at Object.map [as addWprovToSearchResultUrls] (skins/Vector/resources/skins.vector.search/instrumentation.js:63:17) at Object.addWprovToSearchResultUrls (skins/Vector/tests/jest/instrumentation.test.js:40:27) ● instrumentation › addWprovToSearchResultUrls with offset ReferenceError: location is not defined 63 | return results.map( ( result, index ) => { 64 | if ( result.url ) { > 65 | const url = new URL( result.url, location.href ); | ^ 66 | url.searchParams.set( 'wprov', getWprovFromResultIndex( index + offset ) ); 67 | result = Object.assign( {}, result, { url: url.toString() } ); 68 | } at location (skins/Vector/resources/skins.vector.search/instrumentation.js:65:37) at Array.map (<anonymous>) at Object.map [as addWprovToSearchResultUrls] (skins/Vector/resources/skins.vector.search/instrumentation.js:63:17) at Object.addWprovToSearchResultUrls (skins/Vector/tests/jest/instrumentation.test.js:79:27) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.share.test.js ● Test suite failed to run Cannot find module 'mmv.ui.reuse' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.share.test.js' 16 | */ 17 | > 18 | const { Share } = require( 'mmv.ui.reuse' ); | ^ 19 | 20 | function makeShare() { 21 | return new Share( $( '#qunit-fixture' ) ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.share.test.js:18:19) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingStep.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingStep.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | 'use strict'; 2 | > 3 | const TempAccountsOnboardingStep = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingStep.vue' ), | ^ 4 | utils = require( '@vue/test-utils' ); 5 | 6 | const renderComponent = ( props, slots ) => utils.mount( TempAccountsOnboardingStep, { at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/tempAccountsOnboardingStep.test.js:3:36) FAIL tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js ● Test suite failed to run Cannot find module 'mediawiki.rcfilters.filters.ui' from 'tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js' 1 | /* eslint-disable camelcase */ 2 | ( function () { > 3 | const rcfilters = require( 'mediawiki.rcfilters.filters.ui' ); | ^ 4 | const itemData = { 5 | params: { 6 | param1: '1', at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js:3:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js:93:2) FAIL extensions/CheckUser/tests/jest/components/IPAutoRevealOnDialog.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccounts/components/IPAutoRevealOnDialog.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 19 | ] ), { virtual: true } ); 20 | > 21 | const IPAutoRevealOnDialog = require( '../../../modules/ext.checkUser.tempAccounts/components/IPAutoRevealOnDialog.vue' ); | ^ 22 | const utils = require( '@vue/test-utils' ); 23 | const { CdxDialog, CdxSelect } = require( '@wikimedia/codex' ); 24 | at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/IPAutoRevealOnDialog.test.js:21:30) FAIL skins/Vector/tests/jest/skins.vector.js/menuTabs.test.js ● menuTabs › adds vector-tab-noicon class to li element when part of tabs ReferenceError: mw is not defined 5 | /** @type {Function} */ 6 | let callback; > 7 | jest.spyOn( mw, 'hook' ).mockImplementation( () => ( { | ^ 8 | add: function ( fn ) { 9 | callback = fn; 10 | at Object.mw (skins/Vector/tests/jest/skins.vector.js/menuTabs.test.js:7:15) ● menuTabs › does not add vector-tab-noicon class to li element when not part of tabs ReferenceError: mw is not defined 5 | /** @type {Function} */ 6 | let callback; > 7 | jest.spyOn( mw, 'hook' ).mockImplementation( () => ( { | ^ 8 | add: function ( fn ) { 9 | callback = fn; 10 | at Object.mw (skins/Vector/tests/jest/skins.vector.js/menuTabs.test.js:7:15) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIntroStep.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIntroStep.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | 'use strict'; 2 | > 3 | const TempAccountsOnboardingIntroStep = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIntroStep.vue' ), | ^ 4 | utils = require( '@vue/test-utils' ); 5 | 6 | describe( 'First step of temporary accounts onboarding dialog', () => { at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIntroStep.test.js:3:41) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIPRevealStep.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIPRevealStep.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | 'use strict'; 2 | > 3 | const TempAccountsOnboardingIPRevealStep = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIPRevealStep.vue' ), | ^ 4 | utils = require( '@vue/test-utils' ); 5 | 6 | describe( 'First step of temporary accounts onboarding dialog', () => { at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIPRevealStep.test.js:3:44) FAIL tests/qunit/resources/mediawiki.toc.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | ( function () { > 2 | QUnit.module( 'mediawiki.toc', { | ^ 3 | beforeEach: function () { 4 | this.getCookie = this.stub( mw.cookie, 'get' ).returns( null ); 5 | this.setCookie = this.stub( mw.cookie, 'set' ).returns( null ); at QUnit (tests/qunit/resources/mediawiki.toc.test.js:2:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.toc.test.js:42:2) FAIL vendor/wikimedia/parsoid/bin/normalize.test.js ● Test suite failed to run Cannot find module './lib/utils/promise.js' from 'vendor/wikimedia/parsoid/core-upgrade.js' Require stack: vendor/wikimedia/parsoid/core-upgrade.js vendor/wikimedia/parsoid/bin/normalize.test.js 2 | 3 | // Register prfun's Promises with node-pn > 4 | var Promise = require('./lib/utils/promise.js'); | ^ 5 | require('pn/_promise')(Promise); // This only needs to be done once. 6 | 7 | // Comments below annotate the highest lts version of node for which the at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (vendor/wikimedia/parsoid/core-upgrade.js:4:15) at Object.require (vendor/wikimedia/parsoid/bin/normalize.test.js:5:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineParameterWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlineParameterWidget' ); | ^ 2 | 3 | QUnit.test( 'interprets param with no attributes', ( assert ) => { 4 | const widget = new ve.ui.MWTransclusionOutlineParameterWidget( {} ); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineParameterWidget.test.js:1:61) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.DiffElement.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 7 | */ 8 | > 9 | QUnit.module( 've.ui.DiffElement (Cite)' ); | ^ 10 | 11 | QUnit.test( 'Diffing', ( assert ) => { 12 | const spacer = '<div class="ve-ui-diffElement-spacer">⋮</div>', at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.DiffElement.test.js:9:1) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/watchstar.test.js ● Test suite failed to run Cannot find module 'skins.minerva.scripts/watchstar.js' from 'skins/MinervaNeue/tests/qunit/skins.minerva.scripts/watchstar.test.js' 1 | /* eslint-disable no-jquery/no-class-state */ 2 | ( function () { > 3 | const watchstar = require( 'skins.minerva.scripts/watchstar.js' ); | ^ 4 | const toggleClasses = watchstar.test.toggleClasses; 5 | const WATCHED_CLASS = watchstar.test.WATCHED_ICON_CLASS; 6 | const TEMP_WATCHED_CLASS = watchstar.test.TEMP_WATCHED_ICON_CLASS; at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/watchstar.test.js:3:20) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/watchstar.test.js:40:2) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferencesListNode.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.dm.MWReferencesListNode (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'isEditable', ( assert ) => { 6 | let model = new ve.dm.MWReferencesListNode(); at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferencesListNode.test.js:3:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.ContentBranchNode.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.ce.ContentBranchNode (MW)' ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.ContentBranchNode.test.js:8:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js' However, Jest was able to find: './mmv.logging.ViewLogger.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { ViewLogger } = require( 'mmv' ); | ^ 2 | 3 | QUnit.module( 'mmv.logging.ViewLogger', QUnit.newMwEnvironment( { 4 | beforeEach: function () { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js:1:24) FAIL tests/qunit/resources/mediawiki.template.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | ( function () { 2 | > 3 | QUnit.module( 'mediawiki.template', { | ^ 4 | beforeEach: function () { 5 | const abcCompiler = { 6 | compile: function () { at QUnit (tests/qunit/resources/mediawiki.template.test.js:3:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.template.test.js:63:2) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferenceNode.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.dm.MWReferenceNode (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'getGroup', ( assert ) => { 6 | const dataElement = { attributes: { refGroup: 'g' } }; at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferenceNode.test.js:3:1) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/AB.test.js ● Test suite failed to run Cannot find module 'skins.minerva.scripts/AB.js' from 'skins/MinervaNeue/tests/qunit/skins.minerva.scripts/AB.test.js' 1 | ( function () { 2 | > 3 | const AB = require( 'skins.minerva.scripts/AB.js' ); | ^ 4 | const defaultConfig = { 5 | testName: 'WME.MinervaABTest', 6 | samplingRate: 0.5, at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/AB.test.js:3:13) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/AB.test.js:52:2) FAIL tests/jest/mediawiki.special.block/ReasonField.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/components/ReasonField.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 2 | 3 | const { mount, shallowMount } = require( '@vue/test-utils' ); > 4 | const ReasonField = require( '../../../resources/src/mediawiki.special.block/components/ReasonField.vue' ); | ^ 5 | const { mockMwConfigGet } = require( './SpecialBlock.setup.js' ); 6 | 7 | describe( 'ReasonField', () => { at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/ReasonField.test.js:4:21) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.parse.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.edit', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.parse.test.js:1:50) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.messages.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.messages', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.messages.test.js:1:54) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/createTable.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const createTable = require( '../../../../../modules/ext.checkUser/checkuser/checkUserHelper/createTable.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.createTable', QUnit.newMwEnvironment( { | ^ 6 | beforeEach: function () { 7 | mw.config.set( { 8 | wgArticlePath: '/index.php?title=$1' at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/createTable.test.js:5:1) FAIL tests/jest/mediawiki.special.block/BlockDetailsField.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/BlockDetailsField.test.js:5:29) FAIL tests/jest/mediawiki.special.block/init.test.js ● SpecialBlock init.js › should give the form the ID mw-block-form The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 5 | 6 | beforeEach( () => { > 7 | document.body.innerHTML = ''; | ^ 8 | const form = document.createElement( 'form' ); 9 | form.className = 'mw-htmlform'; 10 | document.body.appendChild( form ); at Object.document (tests/jest/mediawiki.special.block/init.test.js:7:3) ● SpecialBlock init.js › should do nothing if there is no mw-htmlform The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 5 | 6 | beforeEach( () => { > 7 | document.body.innerHTML = ''; | ^ 8 | const form = document.createElement( 'form' ); 9 | form.className = 'mw-htmlform'; 10 | document.body.appendChild( form ); at Object.document (tests/jest/mediawiki.special.block/init.test.js:7:3) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/page-issues/index.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'Minerva pageIssues', () => { | ^ 2 | const mobile = require( 'mobile.startup' ); 3 | const pageIssues = require( 'skins.minerva.scripts/page-issues/index.js' ); 4 | const insertBannersOrNotice = pageIssues.test.insertBannersOrNotice; at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/page-issues/index.test.js:1:43) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.Converter.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 8 | */ 9 | > 10 | QUnit.module( 've.dm.Converter (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 11 | 12 | QUnit.test( 'getModelFromDom', ( assert ) => { 13 | const cases = ve.dm.citeExample.domToDataCases; at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.Converter.test.js:10:1) FAIL tests/qunit/resources/mediawiki.experiments.test.js ● Test suite failed to run ReferenceError: mw is not defined 1 | ( function () { 2 | > 3 | const getBucket = mw.experiments.getBucket; | ^ 4 | 5 | function createExperiment() { 6 | return { at mw (tests/qunit/resources/mediawiki.experiments.test.js:3:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.experiments.test.js:63:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvasButtons.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvasButtons.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { CanvasButtons } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.CanvasButtons', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvasButtons.test.js:18:27) FAIL tests/jest/mediawiki.skinning.typeaheadSearch/App.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.skinning.typeaheadSearch/App.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | const VueTestUtils = require( '@vue/test-utils' ); > 2 | const App = require( '../../../resources/src/mediawiki.skinning.typeaheadSearch/App.vue' ); | ^ 3 | const urlGeneratorFn = require( '../../../resources/src/mediawiki.skinning.typeaheadSearch/urlGenerator.js' ); 4 | const scriptPath = '/w/index.php'; 5 | const urlGenerator = urlGeneratorFn( scriptPath ); at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.skinning.typeaheadSearch/App.test.js:2:13) FAIL skins/Vector/tests/integration-qunit/integration.test.js ● Test suite failed to run Cannot find module 'skins.vector.clientPreferences' from 'skins/Vector/tests/integration-qunit/integration.test.js' 1 | /* global QUnit */ > 2 | const clientPreferences = require( 'skins.vector.clientPreferences' ); | ^ 3 | 4 | /*! 5 | * Vector integration tests. at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (skins/Vector/tests/integration-qunit/integration.test.js:2:27) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlinePartWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlinePartWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor', ( assert ) => { 4 | const transclusion = new ve.dm.MWTransclusionModel(), at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlinePartWidget.test.js:1:56) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.clientHints/index.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 'ext.checkUser.clientHints', QUnit.newMwEnvironment( {} ) ); | ^ 4 | 5 | QUnit.test( 'Client hints code is setup if navigator.userAgentData.getHighEntropyValues() is available', function ( assert ) { 6 | const clientHints = require( '../../../modules/ext.checkUser.clientHints/index.js' ); at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser.clientHints/index.test.js:3:1) FAIL skins/Vector/tests/jest/App.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/skins/Vector/resources/skins.vector.search/App.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | const VueTestUtils = require( '@vue/test-utils' ); > 2 | const App = require( '../../resources/skins.vector.search/App.vue' ); | ^ 3 | const urlGeneratorFn = require( '../../resources/skins.vector.search/urlGenerator.js' ); 4 | const scriptPath = '/w/index.php'; 5 | const urlGenerator = urlGeneratorFn( scriptPath ); at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (skins/Vector/tests/jest/App.test.js:2:13) FAIL extensions/DiscussionTools/tests/qunit/utils.test.js ● Test suite failed to run Cannot find module 'ext.discussionTools.init' from 'extensions/DiscussionTools/tests/qunit/utils.test.js' > 1 | const utils = require( 'ext.discussionTools.init' ).utils; | ^ 2 | 3 | QUnit.module( 'mw.dt.utils', QUnit.newMwEnvironment() ); 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (extensions/DiscussionTools/tests/qunit/utils.test.js:1:58) FAIL tests/jest/mediawiki.special.block/AdditionalDetailsField.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/AdditionalDetailsField.test.js:5:29) FAIL extensions/DiscussionTools/tests/qunit/ThreadItem.test.js ● Test suite failed to run Cannot find module 'ext.discussionTools.init' from 'extensions/DiscussionTools/tests/qunit/ThreadItem.test.js' 1 | const > 2 | CommentItem = require( 'ext.discussionTools.init' ).CommentItem, | ^ 3 | HeadingItem = require( 'ext.discussionTools.init' ).HeadingItem; 4 | 5 | QUnit.module( 'mw.dt.ThreadItem', QUnit.newMwEnvironment() ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (extensions/DiscussionTools/tests/qunit/ThreadItem.test.js:2:65) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWParameterCheckboxInputWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWParameterCheckboxInputWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor passes config to parent', ( assert ) => { 4 | const widget = new ve.ui.MWParameterCheckboxInputWidget( { selected: true } ); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWParameterCheckboxInputWidget.test.js:1:55) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.MWDocumentReferences.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.dm.MWDocumentReferences (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'first simple test', ( assert ) => { 6 | const doc = ve.dm.citeExample.createExampleDocument( 'references' ); at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWDocumentReferences.test.js:3:1) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/UriUtil.test.js ● Test suite failed to run Cannot find module 'skins.minerva.scripts/UriUtil.js' from 'skins/MinervaNeue/tests/qunit/skins.minerva.scripts/UriUtil.test.js' 1 | ( function () { > 2 | const UriUtil = require( 'skins.minerva.scripts/UriUtil.js' ); | ^ 3 | 4 | QUnit.module( 'Minerva UriUtil', { 5 | beforeEach: function () { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/UriUtil.test.js:2:18) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/UriUtil.test.js:39:2) FAIL tests/qunit/resources/mediawiki.widgets/NamespaceInput/mediawiki.widgets.NamespaceInputWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | */ 4 | > 5 | QUnit.module( 'mediawiki.widgets.NamespaceInputWidget' ); | ^ 6 | 7 | ( function () { 8 | const widgetA = new mw.widgets.NamespaceInputWidget( {} ); at Object.QUnit (tests/qunit/resources/mediawiki.widgets/NamespaceInput/mediawiki.widgets.NamespaceInputWidget.test.js:5:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlinePlaceholderWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlinePlaceholderWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor', ( assert ) => { 4 | const transclusion = new ve.dm.MWTransclusionModel(), at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlinePlaceholderWidget.test.js:1:63) FAIL tests/qunit/resources/startup/jscompat.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | // JavaScript compatibility tests to confirm that server and browser 2 | // are behaving consistently and configured correctly. > 3 | QUnit.module( 'startup/jscompat', () => { | ^ 4 | 5 | QUnit.test( 'Unicode variable name', ( assert ) => { 6 | const ŝablono = true; at Object.QUnit (tests/qunit/resources/startup/jscompat.test.js:3:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.UrlStringTransferHandler.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.ui.UrlStringTransferHandler (MW)' ); | ^ 8 | 9 | /* Tests */ 10 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.UrlStringTransferHandler.test.js:7:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.Converter.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.dm.Converter (MW)', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | QUnit.test( 'getModelFromDom', ( assert ) => { 11 | const cases = ve.dm.mwExample.domToDataCases; at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.Converter.test.js:8:1) FAIL skins/Vector/tests/jest/skins.vector.es6/features.test.js ● features › toggle The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 3 | describe( 'features', () => { 4 | beforeEach( () => { > 5 | document.documentElement.setAttribute( 'class', 'vector-feature-foo-disabled vector-feature-bar-enabled hello' ); | ^ 6 | } ); 7 | 8 | test( 'toggle', () => { at Object.document (skins/Vector/tests/jest/skins.vector.es6/features.test.js:5:3) ● features › toggle unknown feature The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 3 | describe( 'features', () => { 4 | beforeEach( () => { > 5 | document.documentElement.setAttribute( 'class', 'vector-feature-foo-disabled vector-feature-bar-enabled hello' ); | ^ 6 | } ); 7 | 8 | test( 'toggle', () => { at Object.document (skins/Vector/tests/jest/skins.vector.es6/features.test.js:5:3) FAIL extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.Document.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.ce.Document (MW)' ); | ^ 8 | 9 | /* Tests */ 10 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.Document.test.js:7:1) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWUseExistingReferenceCommand.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.ui.MWUseExistingReferenceCommand (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | function getFragmentMock( hasRefs ) { 6 | const docRefsMock = { at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWUseExistingReferenceCommand.test.js:3:1) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/createTableText.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const createTableText = require( '../../../../../modules/ext.checkUser/checkuser/checkUserHelper/createTableText.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.createTableText' ); | ^ 6 | 7 | QUnit.test( 'Test that createTableText returns the expected wikitext', ( assert ) => { 8 | const cases = require( './cases/createTableText.json' ); at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/createTableText.test.js:5:1) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceGroupInputWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.ui.MWReferenceGroupInputWidget (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'Constructor', ( assert ) => { 6 | const widget = new ve.ui.MWReferenceGroupInputWidget( { at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceGroupInputWidget.test.js:3:1) FAIL tests/qunit/resources/mediawiki.template.mustache.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.template.mustache', ( hooks ) => { | ^ 2 | 3 | hooks.beforeEach( function () { 4 | // Stub register some templates at Object.<anonymous> (tests/qunit/resources/mediawiki.template.mustache.test.js:1:59) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/utils.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const Utils = require( '../../../../../modules/ext.checkUser/checkuser/checkUserHelper/utils.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.utils' ); | ^ 6 | 7 | QUnit.test( 'Test that calculateIPNumber returns the expected value', ( assert ) => { 8 | const cases = require( './cases/calculateIPNumber.json' ); at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/utils.test.js:5:1) PASS tests/jest/mediawiki.skinning.typeaheadSearch/urlGenerator.test.js FAIL tests/qunit/resources/mediawiki.messagePoster/factory.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.messagePoster', ( hooks ) => { | ^ 2 | const TEST_MODEL = 'test-content-model'; 3 | 4 | hooks.afterEach( () => { at Object.<anonymous> (tests/qunit/resources/mediawiki.messagePoster/factory.test.js:1:55) PASS skins/Vector/tests/jest/urlGenerator.test.js FAIL skins/Vector/tests/jest/deferUntilFrame.test.js ● deferUntilFrame.js › does not fire rAF if `0` is passed The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 5 | 6 | beforeEach( () => { > 7 | spy = jest.spyOn( window, 'requestAnimationFrame' ).mockImplementation( ( cb ) => { | ^ 8 | setTimeout( () => { 9 | cb( 1 ); 10 | } ); at Object.window (skins/Vector/tests/jest/deferUntilFrame.test.js:7:21) ● deferUntilFrame.js › does not fire rAF if `0` is passed TypeError: Cannot read properties of undefined (reading 'mockRestore') 15 | 16 | afterEach( () => { > 17 | spy.mockRestore(); | ^ 18 | } ); 19 | 20 | it( 'does not fire rAF if `0` is passed', ( done ) => { at Object.mockRestore (skins/Vector/tests/jest/deferUntilFrame.test.js:17:7) ● deferUntilFrame.js › fires rAF the specified number of times The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 5 | 6 | beforeEach( () => { > 7 | spy = jest.spyOn( window, 'requestAnimationFrame' ).mockImplementation( ( cb ) => { | ^ 8 | setTimeout( () => { 9 | cb( 1 ); 10 | } ); at Object.window (skins/Vector/tests/jest/deferUntilFrame.test.js:7:21) ● deferUntilFrame.js › fires rAF the specified number of times TypeError: Cannot read properties of undefined (reading 'mockRestore') 15 | 16 | afterEach( () => { > 17 | spy.mockRestore(); | ^ 18 | } ); 19 | 20 | it( 'does not fire rAF if `0` is passed', ( done ) => { at Object.mockRestore (skins/Vector/tests/jest/deferUntilFrame.test.js:17:7) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/integration.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | * For unit tests please see tests/jest. 6 | */ > 7 | QUnit.module( 'Minerva (integration)', () => { | ^ 8 | QUnit.test( '[T356653] Client preferences: Check assumptions about the cookie it writes to', function ( assert ) { 9 | mw.cookie.set( 'mwclientpreferences', '' ); 10 | this.sandbox.stub( mw.user, 'isAnon' ).returns( true ); at Object.QUnit (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/integration.test.js:7:1) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/buildUserElement.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const buildUserElement = require( '../../../../../modules/ext.checkUser/checkuser/checkUserHelper/buildUserElement.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.buildUserElement', QUnit.newMwEnvironment( { | ^ 6 | beforeEach: function () { 7 | mw.config.set( { 8 | wgArticlePath: '/wiki/$1' at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/buildUserElement.test.js:5:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineButtonWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlineButtonWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor', ( assert ) => { 4 | const widget = new ve.ui.MWTransclusionOutlineButtonWidget( {} ); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineButtonWidget.test.js:1:58) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionContentModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | { > 2 | QUnit.module( 've.dm.MWTransclusionContentModel' ); | ^ 3 | 4 | /** 5 | * @return {ve.dm.MWTransclusionModel} but it's a mock at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionContentModel.test.js:2:2) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceContextItem.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.ui.MWReferenceContextItem (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'getReferenceNode', ( assert ) => { 6 | // XXX: This is a regression test with a fragile setup. Please feel free to delete this test at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceContextItem.test.js:3:1) FAIL tests/qunit/resources/mediawiki.inspect.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.inspect', () => { | ^ 2 | 3 | QUnit.test( '.getModuleSize() - scripts', ( assert ) => { 4 | // Use eval so that the size doesn't change depending on minification at Object.<anonymous> (tests/qunit/resources/mediawiki.inspect.test.js:1:42) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceResultWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | 3 | ( function () { > 4 | QUnit.module( 've.ui.MWReferenceResultWidget (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 5 | 6 | function getConfigMock() { 7 | return { at QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceResultWidget.test.js:4:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceResultWidget.test.js:22:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { UiElement } = require( 'mmv' ); | ^ 2 | 3 | QUnit.module( 'mmv.ui', QUnit.newMwEnvironment( { 4 | beforeEach: function () { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.test.js:1:23) FAIL extensions/Math/modules/ve-math/tests/ve.dm.Autocomplete.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.dm.Autocomplete (Math)', ve.test.utils.newMwEnvironment() ); | ^ 2 | 3 | QUnit.test( 'Autocomplete list', ( assert ) => { 4 | assert.notStrictEqual( at Object.<anonymous> (extensions/Math/modules/ve-math/tests/ve.dm.Autocomplete.test.js:1:78) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboximage.test.js ● Test suite failed to run Cannot find module 'mmv.bootstrap' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboximage.test.js' > 1 | const { LightboxImage } = require( 'mmv.bootstrap' ); | ^ 2 | 3 | QUnit.module( 'mmv.lightboximage', QUnit.newMwEnvironment() ); 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboximage.test.js:1:27) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWCitationDialogTool.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.ui.MWCitationDialogTool (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'isCompatibleWith', ( assert ) => { 6 | const model = new ve.dm.MWReferenceNode(); at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWCitationDialogTool.test.js:3:1) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.upload.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.upload', () => { | ^ 2 | 3 | QUnit.test( 'Basic functionality', ( assert ) => { 4 | const api = new mw.Api(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.upload.test.js:1:45) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferencesListDialog.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.ui.MWReferencesListDialog (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'isModified', ( assert ) => { 6 | const dialog = new ve.ui.MWReferencesListDialog(); at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferencesListDialog.test.js:3:1) FAIL tests/qunit/resources/mediawiki.router.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.router', () => { | ^ 2 | const router = require( 'mediawiki.router' ); 3 | 4 | QUnit.test( 'instance', ( assert ) => { at Object.<anonymous> (tests/qunit/resources/mediawiki.router.test.js:1:41) FAIL skins/Vector/tests/jest/userLinks.test.js ● Test suite failed to run Cannot find module 'mustache' from 'skins/Vector/tests/jest/userLinksData.js' Require stack: skins/Vector/tests/jest/userLinksData.js skins/Vector/tests/jest/userLinks.test.js > 1 | const mustache = require( 'mustache' ); | ^ 2 | const fs = require( 'fs' ); 3 | const menuContents = fs.readFileSync( 'includes/templates/MenuContents.mustache', 'utf8' ); 4 | const userLinksTemplate = fs.readFileSync( 'includes/templates/UserLinks.mustache', 'utf8' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (skins/Vector/tests/jest/userLinksData.js:1:39) at Object.require (skins/Vector/tests/jest/userLinks.test.js:1:27) FAIL tests/qunit/resources/jquery.tablesorter.parsers.test.js ● Test suite failed to run Your test suite must contain at least one test. at onResult (node_modules/@jest/core/build/TestScheduler.js:133:18) at node_modules/@jest/core/build/TestScheduler.js:254:19 at node_modules/emittery/index.js:363:13 at Array.map (<anonymous>) at Emittery.emit (node_modules/emittery/index.js:361:23) Summary of all failing tests FAIL tests/qunit/resources/jquery.tablesorter.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'jquery.tablesorter', QUnit.newMwEnvironment( { | ^ 2 | beforeEach: function () { 3 | this.liveMonths = mw.language.months; 4 | mw.language.months = { at Object.<anonymous> (tests/qunit/resources/jquery.tablesorter.test.js:1:61) FAIL tests/qunit/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js ● Test suite failed to run Cannot find module 'mediawiki.rcfilters.filters.ui' from 'tests/qunit/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js' 1 | /* eslint-disable camelcase */ 2 | ( function () { > 3 | const rcfilters = require( 'mediawiki.rcfilters.filters.ui' ); | ^ 4 | const filterDefinition = [ { 5 | name: 'group1', 6 | type: 'send_unselected_if_any', at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js:3:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js:1550:2) FAIL tests/qunit/resources/mediawiki.jqueryMsg.test.js ● Test suite failed to run Cannot find module 'mediawiki.jqueryMsg' from 'tests/qunit/resources/mediawiki.jqueryMsg.test.js' 1 | ( function () { > 2 | const jqueryMsg = require( 'mediawiki.jqueryMsg' ).test; | ^ 3 | 4 | /* eslint-disable camelcase */ 5 | let formatText, formatParse, specialCharactersPageName, expectedListUsers, at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.jqueryMsg.test.js:2:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.jqueryMsg.test.js:1469:2) FAIL tests/qunit/resources/mediawiki.util/util.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.util', QUnit.newMwEnvironment( { | ^ 2 | messages: { 3 | // Used by accessKeyLabel in test for addPortletLink 4 | brackets: '[$1]', at Object.<anonymous> (tests/qunit/resources/mediawiki.util/util.test.js:1:57) FAIL tests/qunit/resources/startup/mw.loader.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | ( function () { > 2 | QUnit.module( 'mw.loader', QUnit.newMwEnvironment( { | ^ 3 | beforeEach: function ( assert ) { 4 | // Expose for load.mock.php 5 | mw.loader.testFail = function ( reason ) { at QUnit (tests/qunit/resources/startup/mw.loader.test.js:2:2) at Object.<anonymous> (tests/qunit/resources/startup/mw.loader.test.js:1236:2) FAIL tests/qunit/resources/mediawiki.language.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | 'use strict'; 3 | > 4 | QUnit.module( 'mediawiki.language', QUnit.newMwEnvironment( { | ^ 5 | beforeEach: function () { 6 | this.userLang = mw.config.get( 'wgUserLanguage' ); 7 | this.liveLangData = mw.language.data; at QUnit (tests/qunit/resources/mediawiki.language.test.js:4:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.language.test.js:915:2) FAIL tests/qunit/resources/mediawiki.Title.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 75 | }; 76 | > 77 | QUnit.module( 'mediawiki.Title', QUnit.newMwEnvironment( { | ^ 78 | // mw.Title relies on these three config vars 79 | // Restore them after each test run 80 | config: { at QUnit (tests/qunit/resources/mediawiki.Title.test.js:77:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.Title.test.js:771:2) FAIL tests/qunit/resources/jquery.makeCollapsible.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | /* eslint-disable no-jquery/no-class-state */ > 2 | QUnit.module( 'jquery.makeCollapsible', () => { | ^ 3 | const loremIpsum = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.'; 4 | 5 | /** at Object.QUnit (tests/qunit/resources/jquery.makeCollapsible.test.js:2:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.test.js' However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { MultimediaViewer } = require( 'mmv' ); | ^ 2 | const { getMultimediaViewer } = require( './mmv.testhelpers.js' ); 3 | const { MultimediaViewerBootstrap } = require( 'mmv.bootstrap' ); 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.test.js:1:30) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.bootstrap.test.js ● Test suite failed to run Cannot find module 'mmv.bootstrap' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.bootstrap.test.js' > 1 | const { MultimediaViewerBootstrap } = require( 'mmv.bootstrap' ); | ^ 2 | const { asyncMethod, waitForAsync, getMultimediaViewer } = require( './mmv.testhelpers.js' ); 3 | 4 | QUnit.module( 'mmv.bootstrap', QUnit.newMwEnvironment( { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.bootstrap.test.js:1:39) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTemplateSpecModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | { > 2 | QUnit.module( 've.dm.MWTemplateSpecModel' ); | ^ 3 | 4 | /** 5 | * @param {string[]} [parameterNames] at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTemplateSpecModel.test.js:2:2) FAIL tests/jest/mediawiki.special.block/SpecialBlock.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.test.js:5:29) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingDialog.test.js ● Test suite failed to run ReferenceError: /src/repo/extensions/CheckUser/tests/jest/components/tempAccountsOnboardingDialog.test.js: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables. Invalid variable access: useComputedDirectionMock Allowed objects: AbortController, AbortSignal, AggregateError, Array, ArrayBuffer, Atomics, BigInt, BigInt64Array, BigUint64Array, Blob, Boolean, BroadcastChannel, Buffer, ByteLengthQueuingStrategy, CompressionStream, CountQueuingStrategy, Crypto, CryptoKey, CustomEvent, DOMException, DataView, Date, DecompressionStream, Error, EvalError, Event, EventTarget, File, FinalizationRegistry, Float32Array, Float64Array, FormData, Function, Generator, GeneratorFunction, Headers, Infinity, Int16Array, Int32Array, Int8Array, InternalError, Intl, JSON, Map, Math, MessageChannel, MessageEvent, MessagePort, NaN, Number, Object, Performance, PerformanceEntry, PerformanceMark, PerformanceMeasure, PerformanceObserver, PerformanceObserverEntryList, PerformanceResourceTiming, Promise, Proxy, RangeError, ReadableByteStreamController, ReadableStream, ReadableStreamBYOBReader, ReadableStreamBYOBRequest, ReadableStreamDefaultController, ReadableStreamDefaultReader, ReferenceError, Reflect, RegExp, Request, Response, Set, SharedArrayBuffer, String, SubtleCrypto, Symbol, SyntaxError, TextDecoder, TextDecoderStream, TextEncoder, TextEncoderStream, TransformStream, TransformStreamDefaultController, TypeError, URIError, URL, URLSearchParams, Uint16Array, Uint32Array, Uint8Array, Uint8ClampedArray, WeakMap, WeakRef, WeakSet, WebAssembly, WritableStream, WritableStreamDefaultController, WritableStreamDefaultWriter, __dirname, __filename, arguments, atob, btoa, clearImmediate, clearInterval, clearTimeout, console, crypto, decodeURI, decodeURIComponent, encodeURI, encodeURIComponent, escape, eval, expect, exports, fetch, global, globalThis, isFinite, isNaN, jest, module, parseFloat, parseInt, performance, process, queueMicrotask, require, setImmediate, setInterval, setTimeout, structuredClone, undefined, unescape. Note: This is a precaution to guard against uninitialized mock variables. If it is ensured that the mock is required lazily, variable names prefixed with `mock` (case insensitive) are permitted. 15 | 16 | return Object.assign( > 17 | { __esModule: true }, originalModule, { useComputedDirection: useComputedDirectionMock } | ^^^^^^^^^^^^^^^^^^^^^^^^ 18 | ); 19 | } ); 20 | at File.buildCodeFrameError (node_modules/@babel/core/src/transformation/file/file.ts:247:12) at NodePath.buildError [as buildCodeFrameError] (node_modules/@babel/traverse/src/path/index.ts:141:21) at call (node_modules/@babel/traverse/src/visitors.ts:303:14) at NodePath.call [as _call] (node_modules/@babel/traverse/src/path/context.ts:36:20) at NodePath.call (node_modules/@babel/traverse/src/path/context.ts:21:18) at NodePath.call [as visit] (node_modules/@babel/traverse/src/path/context.ts:97:31) at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16) at TraversalContext.visitQueue [as visitMultiple] (node_modules/@babel/traverse/src/context.ts:99:17) at TraversalContext.visitMultiple [as visit] (node_modules/@babel/traverse/src/context.ts:178:19) at visit (node_modules/@babel/traverse/src/traverse-node.ts:40:17) at NodePath.visit (node_modules/@babel/traverse/src/path/context.ts:104:33) at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16) at TraversalContext.visitQueue [as visitSingle] (node_modules/@babel/traverse/src/context.ts:109:19) at TraversalContext.visitSingle [as visit] (node_modules/@babel/traverse/src/context.ts:180:19) at visit (node_modules/@babel/traverse/src/traverse-node.ts:40:17) at traverse (node_modules/@babel/traverse/src/index.ts:83:15) at transformFile (node_modules/@babel/core/src/transformation/index.ts:124:15) at transformFile.next (<anonymous>) at transformFile (node_modules/@babel/core/src/transformation/index.ts:48:12) at run.next (<anonymous>) at transform (node_modules/@babel/core/src/transform.ts:29:20) at transform.next (<anonymous>) at evaluateSync (node_modules/gensync/index.js:251:28) at sync (node_modules/gensync/index.js:89:14) at fn (node_modules/@babel/core/src/errors/rewrite-stack-trace.ts:99:14) at transformSync (node_modules/@babel/core/src/transform.ts:66:52) at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:545:31) at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40) at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api', ( hooks ) => { | ^ 2 | const originalFormData = window.FormData; 3 | const originalMwVersion = mw.config.get( 'wgVersion' ); 4 | hooks.beforeEach( function () { at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.test.js:1:45) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIPInfoStep.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIPInfoStep.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | 'use strict'; 2 | > 3 | const TempAccountsOnboardingIPInfoStep = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIPInfoStep.vue' ), | ^ 4 | utils = require( '@vue/test-utils' ), 5 | { mockApiSaveOption, waitFor } = require( '../utils.js' ); 6 | at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIPInfoStep.test.js:3:42) FAIL tests/qunit/resources/mediawiki.Uri.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.Uri', ( hooks ) => { | ^ 2 | hooks.beforeEach( function () { 3 | this.sandbox.replace( mw, 'Uri', mw.UriRelative( 'http://example.org/w/index.php' ) ); 4 | } ); at Object.<anonymous> (tests/qunit/resources/mediawiki.Uri.test.js:1:45) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/ipReveal.test.js ● Test suite failed to run ReferenceError: OO is not defined 32 | this.popup.connect( this, { toggle: 'onVisibilityChanged' } ); 33 | } > 34 | OO.inheritClass( BlockDetailsPopupButtonWidget, OO.ui.PopupButtonWidget ); | ^ 35 | 36 | /** 37 | * Promise holding resolved block details, reused between different popups on the same page. at Object.OO (extensions/CheckUser/modules/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.js:34:1) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/ipReveal.js:1:86) at Object.require (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/ipReveal.test.js:3:18) FAIL tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js ● Test suite failed to run Cannot find module 'mediawiki.rcfilters.filters.ui' from 'tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js' 1 | /* eslint-disable camelcase */ 2 | ( function () { > 3 | const rcfilters = require( 'mediawiki.rcfilters.filters.ui' ); | ^ 4 | const filterDefinition = [ { 5 | name: 'group1', 6 | type: 'send_unselected_if_any', at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js:3:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js:608:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.GuessedThumbnailInfo.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.GuessedThumbnailInfo.test.js' However, Jest was able to find: './mmv.provider.Api.test.js' './mmv.provider.GuessedThumbnailInfo.test.js' './mmv.provider.Image.test.js' './mmv.provider.ImageInfo.test.js' './mmv.provider.ThumbnailInfo.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { GuessedThumbnailInfo } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.provider.GuessedThumbnailInfo', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.GuessedThumbnailInfo.test.js:18:34) FAIL skins/Vector/tests/jest/tableOfContents.test.js ● Test suite failed to run Cannot find module 'mustache' from 'skins/Vector/tests/jest/tableOfContents.test.js' > 1 | const mustache = require( 'mustache' ); | ^ 2 | const fs = require( 'fs' ); 3 | const tableOfContentsTemplate = fs.readFileSync( 'includes/templates/TableOfContents.mustache', 'utf8' ); 4 | const tableOfContentsContentsTemplate = fs.readFileSync( 'includes/templates/TableOfContents__list.mustache', 'utf8' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (skins/Vector/tests/jest/tableOfContents.test.js:1:39) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTemplateModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 21 | }; 22 | > 23 | QUnit.module( 've.dm.MWTemplateModel' ); | ^ 24 | 25 | /** 26 | * Create a new MWTemplateModel initialized with a static transclusion data fixture. at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTemplateModel.test.js:23:2) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/SpecialBlock.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | let server; 7 | > 8 | QUnit.module( 'ext.checkUser.tempAccounts.SpecialBlock', QUnit.newMwEnvironment( { | ^ 9 | beforeEach: function () { 10 | this.server = this.sandbox.useFakeServer(); 11 | this.server.respondImmediately = true; at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/SpecialBlock.test.js:8:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.EmbedFileFormatter.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.EmbedFileFormatter.test.js' However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { License, ImageModel } = require( 'mmv' ); | ^ 2 | const { EmbedFileFormatter } = require( 'mmv.ui.reuse' ); 3 | 4 | QUnit.module( 'mmv.EmbedFileFormatter', QUnit.newMwEnvironment() ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.EmbedFileFormatter.test.js:1:33) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.embed.test.js ● Test suite failed to run Cannot find module 'mmv.ui.reuse' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.embed.test.js' 16 | */ 17 | > 18 | const { Embed, Utils } = require( 'mmv.ui.reuse' ); | ^ 19 | 20 | const $qf = $( '#qunit-fixture' ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.embed.test.js:18:26) FAIL extensions/VisualEditor/modules/ve-mw/tests/preinit/ve.utils.parsoid.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.utils.parsoid', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | QUnit.test( 'reduplicateStyles/deduplicateStyles', ( assert ) => { 11 | // Test cases based on this page and the templates there: at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/preinit/ve.utils.parsoid.test.js:8:1) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/initOnLoad.test.js ● Test suite failed to run ReferenceError: OO is not defined 32 | this.popup.connect( this, { toggle: 'onVisibilityChanged' } ); 33 | } > 34 | OO.inheritClass( BlockDetailsPopupButtonWidget, OO.ui.PopupButtonWidget ); | ^ 35 | 36 | /** 37 | * Promise holding resolved block details, reused between different popups on the same page. at Object.OO (extensions/CheckUser/modules/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.js:34:1) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/ipReveal.js:1:86) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/initOnLoad.js:1:44) at Object.require (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/initOnLoad.test.js:3:20) FAIL tests/qunit/resources/mediawiki.user.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.user', QUnit.newMwEnvironment(), ( hooks ) => { | ^ 2 | hooks.beforeEach( function () { 3 | this.server = this.sandbox.useFakeServer(); 4 | this.server.respondImmediately = true; at Object.<anonymous> (tests/qunit/resources/mediawiki.user.test.js:1:72) FAIL extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ImageInfo.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ImageInfo.test.js' However, Jest was able to find: './mmv.provider.Api.test.js' './mmv.provider.GuessedThumbnailInfo.test.js' './mmv.provider.Image.test.js' './mmv.provider.ImageInfo.test.js' './mmv.provider.ThumbnailInfo.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { ImageInfo } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.provider.ImageInfo', QUnit.newMwEnvironment( { 21 | // mw.Title relies on these three config vars at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ImageInfo.test.js:18:23) FAIL tests/qunit/resources/mediawiki.base/mediawiki.base.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.base', ( hooks ) => { | ^ 2 | hooks.beforeEach( function () { 3 | this.clock = this.sandbox.useFakeTimers(); 4 | } ); at Object.<anonymous> (tests/qunit/resources/mediawiki.base/mediawiki.base.test.js:1:46) FAIL extensions/WikiEditor/tests/qunit/ext.wikiEditor.toolbar.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'ext.wikiEditor.toolbar', ( hooks ) => { | ^ 2 | hooks.beforeEach( function () { 3 | const $target = $( '<textarea>' ) 4 | .attr( 'id', 'wpTextBox1' ) at Object.<anonymous> (extensions/WikiEditor/tests/qunit/ext.wikiEditor.toolbar.test.js:1:54) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.HtmlUtils.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.HtmlUtils.test.js' However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { HtmlUtils } = require( 'mmv' ); | ^ 19 | 20 | /* eslint-disable no-jquery/no-parse-html-literal */ 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.HtmlUtils.test.js:18:23) FAIL tests/qunit/resources/mediawiki.rcfilters/UriProcessor.test.js ● Test suite failed to run Cannot find module 'mediawiki.rcfilters.filters.ui' from 'tests/qunit/resources/mediawiki.rcfilters/UriProcessor.test.js' 2 | /* eslint no-underscore-dangle: "off" */ 3 | ( function () { > 4 | const rcfilters = require( 'mediawiki.rcfilters.filters.ui' ); | ^ 5 | const mockFilterStructure = [ { 6 | name: 'group1', 7 | title: 'Group 1', at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.rcfilters/UriProcessor.test.js:4:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.rcfilters/UriProcessor.test.js:308:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboxinterface.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboxinterface.test.js' However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { LightboxInterface } = require( 'mmv' ); | ^ 2 | const { getMultimediaViewer } = require( './mmv.testhelpers.js' ); 3 | 4 | let oldScrollTo; at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboxinterface.test.js:1:31) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/initOnHook.test.js ● Test suite failed to run ReferenceError: OO is not defined 32 | this.popup.connect( this, { toggle: 'onVisibilityChanged' } ); 33 | } > 34 | OO.inheritClass( BlockDetailsPopupButtonWidget, OO.ui.PopupButtonWidget ); | ^ 35 | 36 | /** 37 | * Promise holding resolved block details, reused between different popups on the same page. at Object.OO (extensions/CheckUser/modules/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.js:34:1) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/ipReveal.js:1:86) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/initOnHook.js:1:44) at Object.require (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/initOnHook.test.js:3:20) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/investigate/blockform.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const addBlockForm = require( '../../../../modules/ext.checkUser/investigate/blockform.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.investigate.blockform', QUnit.newMwEnvironment() ); | ^ 6 | 7 | function setUpDocumentForTest( targets ) { 8 | // eslint-disable-next-line no-jquery/no-global-selector at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/investigate/blockform.test.js:5:1) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/getUsersBlockForm.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const getUsersBlockForm = require( '../../../../modules/ext.checkUser/checkuser/getUsersBlockForm.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.getUsersBlockForm', QUnit.newMwEnvironment() ); | ^ 6 | 7 | /** 8 | * Set up the QUnit fixture for testing the getUsersBlockForm function. at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/getUsersBlockForm.test.js:5:1) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/downloadPageAction.test.js ● Test suite failed to run ReferenceError: $ is not defined 5 | $el: $( '<span>' ) 6 | } ); > 7 | const Deferred = $.Deferred; | ^ 8 | const windowChrome = { chrome: true }; 9 | const windowNotChrome = {}; 10 | const downloadAction = require( 'skins.minerva.scripts/downloadPageAction.js' ); at $ (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/downloadPageAction.test.js:7:19) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/downloadPageAction.test.js:196:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Image.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Image.test.js' However, Jest was able to find: './mmv.model.Image.test.js' './mmv.model.License.test.js' './mmv.model.Repo.test.js' './mmv.model.TaskQueue.test.js' './mmv.model.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { ImageModel, License } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.model.Image', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Image.test.js:18:33) FAIL tests/jest/mediawiki.special.block/stores/block.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/stores/block.test.js:6:29) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanel.test.js ● Test suite failed to run Cannot find module 'mmv.bootstrap' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanel.test.js' > 1 | const { Config } = require( 'mmv.bootstrap' ); | ^ 2 | const { MetadataPanel, License } = require( 'mmv' ); 3 | 4 | const mwMessagesExists = mw.messages.exists; at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanel.test.js:1:20) FAIL tests/qunit/resources/mediawiki.DateFormatter/DateFormatter.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 4 | const nextDay = new Date( '2025-01-02T00:00:00Z' ); 5 | > 6 | QUnit.module( 'mediawiki.DateFormatter static functions', ( hooks ) => { | ^ 7 | let userOptions; 8 | 9 | function fakeOptionsGet( key, fallback ) { at Object.QUnit (tests/qunit/resources/mediawiki.DateFormatter/DateFormatter.test.js:6:1) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.InternalList.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 8 | */ 9 | > 10 | QUnit.module( 've.dm.InternalList (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 11 | 12 | /* Tests */ 13 | at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.InternalList.test.js:10:1) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/TitleUtil.test.js ● Test suite failed to run Cannot find module 'skins.minerva.scripts/TitleUtil.js' from 'skins/MinervaNeue/tests/qunit/skins.minerva.scripts/TitleUtil.test.js' 1 | ( function () { > 2 | const TitleUtil = require( 'skins.minerva.scripts/TitleUtil.js' ); | ^ 3 | const UriUtil = require( 'skins.minerva.scripts/UriUtil.js' ); 4 | 5 | QUnit.module( 'Minerva TitleUtil', QUnit.newMwEnvironment( { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/TitleUtil.test.js:2:20) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/TitleUtil.test.js:274:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.ThumbnailWidthCalculator.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.ThumbnailWidthCalculator.test.js' However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { ThumbnailWidthCalculator } = require( 'mmv' ); | ^ 2 | 3 | QUnit.module( 'mmv.ThumbnailWidthCalculator', QUnit.newMwEnvironment() ); 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.ThumbnailWidthCalculator.test.js:1:38) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.Config.test.js ● Test suite failed to run Cannot find module 'mmv.bootstrap' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.Config.test.js' 16 | */ 17 | > 18 | const { Config } = require( 'mmv.bootstrap' ); | ^ 19 | const { createLocalStorage, getFakeLocalStorage } = require( './mmv.testhelpers.js' ); 20 | const config0 = mw.config; 21 | const storage = mw.storage; at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.Config.test.js:18:20) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.dialog.test.js ● Test suite failed to run Cannot find module 'mmv.ui.reuse' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.dialog.test.js' 16 | */ 17 | > 18 | const { ReuseDialog } = require( 'mmv.ui.reuse' ); | ^ 19 | 20 | function makeReuseDialog( sandbox ) { 21 | const $fixture = $( '#qunit-fixture' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.dialog.test.js:18:25) FAIL tests/qunit/resources/jquery.lengthLimit.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'jquery.lengthLimit', () => { | ^ 2 | // Simple sample (20 chars, 20 bytes) 3 | const simpleSample = '12345678901234567890'; 4 | at Object.<anonymous> (tests/qunit/resources/jquery.lengthLimit.test.js:1:43) FAIL extensions/CheckUser/tests/jest/components/showIPButton.test.js ● Test suite failed to run ReferenceError: /src/repo/extensions/CheckUser/tests/jest/components/showIPButton.test.js: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables. Invalid variable access: getFormattedBlockDetails Allowed objects: AbortController, AbortSignal, AggregateError, Array, ArrayBuffer, Atomics, BigInt, BigInt64Array, BigUint64Array, Blob, Boolean, BroadcastChannel, Buffer, ByteLengthQueuingStrategy, CompressionStream, CountQueuingStrategy, Crypto, CryptoKey, CustomEvent, DOMException, DataView, Date, DecompressionStream, Error, EvalError, Event, EventTarget, File, FinalizationRegistry, Float32Array, Float64Array, FormData, Function, Generator, GeneratorFunction, Headers, Infinity, Int16Array, Int32Array, Int8Array, InternalError, Intl, JSON, Map, Math, MessageChannel, MessageEvent, MessagePort, NaN, Number, Object, Performance, PerformanceEntry, PerformanceMark, PerformanceMeasure, PerformanceObserver, PerformanceObserverEntryList, PerformanceResourceTiming, Promise, Proxy, RangeError, ReadableByteStreamController, ReadableStream, ReadableStreamBYOBReader, ReadableStreamBYOBRequest, ReadableStreamDefaultController, ReadableStreamDefaultReader, ReferenceError, Reflect, RegExp, Request, Response, Set, SharedArrayBuffer, String, SubtleCrypto, Symbol, SyntaxError, TextDecoder, TextDecoderStream, TextEncoder, TextEncoderStream, TransformStream, TransformStreamDefaultController, TypeError, URIError, URL, URLSearchParams, Uint16Array, Uint32Array, Uint8Array, Uint8ClampedArray, WeakMap, WeakRef, WeakSet, WebAssembly, WritableStream, WritableStreamDefaultController, WritableStreamDefaultWriter, __dirname, __filename, arguments, atob, btoa, clearImmediate, clearInterval, clearTimeout, console, crypto, decodeURI, decodeURIComponent, encodeURI, encodeURIComponent, escape, eval, expect, exports, fetch, global, globalThis, isFinite, isNaN, jest, module, parseFloat, parseInt, performance, process, queueMicrotask, require, setImmediate, setInterval, setTimeout, structuredClone, undefined, unescape. Note: This is a precaution to guard against uninitialized mock variables. If it is ensured that the mock is required lazily, variable names prefixed with `mock` (case insensitive) are permitted. 22 | jest.mock( 23 | '../../../modules/ext.checkUser.tempAccounts/api.js', > 24 | () => ( { getFormattedBlockDetails } ) | ^^^^^^^^^^^^^^^^^^^^^^^^ 25 | ); 26 | 27 | const ShowIPButton = require( '../../../modules/ext.checkUser.tempAccounts/ShowIPButton.vue' ); at File.buildCodeFrameError (node_modules/@babel/core/src/transformation/file/file.ts:247:12) at NodePath.buildError [as buildCodeFrameError] (node_modules/@babel/traverse/src/path/index.ts:141:21) at call (node_modules/@babel/traverse/src/visitors.ts:303:14) at NodePath.call [as _call] (node_modules/@babel/traverse/src/path/context.ts:36:20) at NodePath.call (node_modules/@babel/traverse/src/path/context.ts:21:18) at NodePath.call [as visit] (node_modules/@babel/traverse/src/path/context.ts:97:31) at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16) at TraversalContext.visitQueue [as visitMultiple] (node_modules/@babel/traverse/src/context.ts:99:17) at TraversalContext.visitMultiple [as visit] (node_modules/@babel/traverse/src/context.ts:178:19) at visit (node_modules/@babel/traverse/src/traverse-node.ts:40:17) at NodePath.visit (node_modules/@babel/traverse/src/path/context.ts:104:33) at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16) at TraversalContext.visitQueue [as visitSingle] (node_modules/@babel/traverse/src/context.ts:109:19) at TraversalContext.visitSingle [as visit] (node_modules/@babel/traverse/src/context.ts:180:19) at visit (node_modules/@babel/traverse/src/traverse-node.ts:40:17) at traverse (node_modules/@babel/traverse/src/index.ts:83:15) at transformFile (node_modules/@babel/core/src/transformation/index.ts:124:15) at transformFile.next (<anonymous>) at transformFile (node_modules/@babel/core/src/transformation/index.ts:48:12) at run.next (<anonymous>) at transform (node_modules/@babel/core/src/transform.ts:29:20) at transform.next (<anonymous>) at evaluateSync (node_modules/gensync/index.js:251:28) at sync (node_modules/gensync/index.js:89:14) at fn (node_modules/@babel/core/src/errors/rewrite-stack-trace.ts:99:14) at transformSync (node_modules/@babel/core/src/transform.ts:66:52) at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:545:31) at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40) at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19) FAIL skins/Vector/tests/jest/AB.test.js ● Test suite failed to run ReferenceError: mw is not defined 38 | const bucket = 'treatment'; 39 | const getBucketMock = jest.fn().mockReturnValue( bucket ); > 40 | mw.experiments.getBucket = getBucketMock; | ^ 41 | 42 | afterEach( () => { 43 | document.body.removeAttribute( 'class' ); at mw (skins/Vector/tests/jest/AB.test.js:40:2) at Object.describe (skins/Vector/tests/jest/AB.test.js:37:1) FAIL skins/Vector/tests/jest/pinnableElement.test.js ● Test suite failed to run Cannot find module 'mustache' from 'skins/Vector/tests/jest/pinnableElement.test.js' 2 | 3 | const features = require( '../../resources/skins.vector.js/features.js' ); > 4 | const mustache = require( 'mustache' ); | ^ 5 | const fs = require( 'fs' ); 6 | const pinnableHeaderTemplate = fs.readFileSync( 'includes/templates/PinnableHeader.mustache', 'utf8' ); 7 | const pinnableElement = require( '../../resources/skins.vector.js/pinnableElement.js' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (skins/Vector/tests/jest/pinnableElement.test.js:4:18) FAIL extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ThumbnailInfo.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ThumbnailInfo.test.js' However, Jest was able to find: './mmv.provider.Api.test.js' './mmv.provider.GuessedThumbnailInfo.test.js' './mmv.provider.Image.test.js' './mmv.provider.ImageInfo.test.js' './mmv.provider.ThumbnailInfo.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { ThumbnailInfo } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.provider.ThumbnailInfo', QUnit.newMwEnvironment( { 21 | // mw.Title relies on these three config vars at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.ThumbnailInfo.test.js:18:27) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvas.test.js ● Test suite failed to run Cannot find module 'mmv.bootstrap' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvas.test.js' 16 | */ 17 | > 18 | const { LightboxImage } = require( 'mmv.bootstrap' ); | ^ 19 | const { Canvas } = require( 'mmv' ); 20 | 21 | QUnit.module( 'mmv.ui.Canvas', QUnit.newMwEnvironment() ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvas.test.js:18:27) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.ui.MWWikitextStringTransferHandler', ve.test.utils.newMwEnvironment( { | ^ 8 | beforeEach() { 9 | // Mock XHR for mw.Api() 10 | this.server = this.sandbox.useFakeServer(); at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js:7:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanelScroller.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.testhelpers.js' Require stack: extensions/MultimediaViewer/tests/qunit/mmv/mmv.testhelpers.js extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanelScroller.test.js However, Jest was able to find: './mmv.bootstrap.test.js' './mmv.Config.test.js' './mmv.EmbedFileFormatter.test.js' './mmv.HtmlUtils.test.js' './mmv.lightboximage.test.js' './mmv.lightboxinterface.test.js' './mmv.test.js' './mmv.testhelpers.js' './mmv.ThumbnailWidthCalculator.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { MultimediaViewer } = require( 'mmv' ); | ^ 2 | 3 | const MTH = {}; 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.testhelpers.js:1:30) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.metadataPanelScroller.test.js:18:81) FAIL tests/qunit/resources/startup/mediawiki.test.js ● Test suite failed to run Cannot find module 'mediawiki.jqueryMsg' from 'tests/qunit/resources/startup/mediawiki.test.js' 1 | ( function () { > 2 | const jqueryMsg = require( 'mediawiki.jqueryMsg' ).test; | ^ 3 | QUnit.module( 'mediawiki' ); 4 | 5 | QUnit.test( 'Initial check', ( assert ) => { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/startup/mediawiki.test.js:2:20) at Object.<anonymous> (tests/qunit/resources/startup/mediawiki.test.js:156:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/init/targets/ve.init.mw.DesktopArticleTarget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.init.mw.DesktopArticleTarget', ve.test.utils.newMwEnvironment( { | ^ 9 | config: { 10 | wgVisualEditor: ve.extendObject( {}, mw.config.get( 'wgVisualEditor' ), { 11 | pageLanguageCode: 'he', at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/init/targets/ve.init.mw.DesktopArticleTarget.test.js:8:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.License.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.License.test.js' However, Jest was able to find: './mmv.model.Image.test.js' './mmv.model.License.test.js' './mmv.model.Repo.test.js' './mmv.model.TaskQueue.test.js' './mmv.model.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { License } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.model.License', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.License.test.js:18:21) FAIL extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.TaskQueue.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.TaskQueue.test.js' However, Jest was able to find: './mmv.model.Image.test.js' './mmv.model.License.test.js' './mmv.model.Repo.test.js' './mmv.model.TaskQueue.test.js' './mmv.model.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { TaskQueue } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.model.TaskQueue', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.TaskQueue.test.js:18:23) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/SpecialContributions.test.js ● Test suite failed to run ReferenceError: OO is not defined 32 | this.popup.connect( this, { toggle: 'onVisibilityChanged' } ); 33 | } > 34 | OO.inheritClass( BlockDetailsPopupButtonWidget, OO.ui.PopupButtonWidget ); | ^ 35 | 36 | /** 37 | * Promise holding resolved block details, reused between different popups on the same page. at Object.OO (extensions/CheckUser/modules/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.js:34:1) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/ipReveal.js:1:86) at Object.<anonymous> (extensions/CheckUser/modules/ext.checkUser.tempAccounts/SpecialContributions.js:1:44) at Object.require (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/SpecialContributions.test.js:3:30) FAIL skins/Vector/tests/jest/skins.vector.js/dropdownMenus.test.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 157 | // Enhance previously added items. 158 | Array.prototype.forEach.call( > 159 | document.querySelectorAll( '.mw-list-item-js' ), | ^ 160 | ( item ) => { 161 | addPortletLinkHandler( item, { 162 | id: item.getAttribute( 'id' ) at Object.document (skins/Vector/resources/skins.vector.js/dropdownMenus.js:159:2) at Object.require (skins/Vector/tests/jest/skins.vector.js/dropdownMenus.test.js:3:35) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/annotations/ve.dm.MWInternalLinkAnnotation.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.dm.MWInternalLinkAnnotation', ve.test.utils.newMwEnvironment() ); | ^ 8 | 9 | QUnit.test( 'toDataElement', ( assert ) => { 10 | // The expected data depends on site configuration, so we need to generate the cases several times. at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/annotations/ve.dm.MWInternalLinkAnnotation.test.js:7:1) FAIL tests/qunit/resources/jquery.highlightText.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'jquery.highlightText', () => { | ^ 2 | 3 | QUnit.test.each( 'highlightText()', [ 4 | { at Object.<anonymous> (tests/qunit/resources/jquery.highlightText.test.js:1:45) FAIL tests/qunit/resources/mediawiki.widgets/MediaSearch/mediawiki.widgets.APIResultsQueue.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 'mediawiki.widgets.APIResultsQueue' ); | ^ 8 | 9 | ( function () { 10 | let itemCounter = 0; at Object.QUnit (tests/qunit/resources/mediawiki.widgets/MediaSearch/mediawiki.widgets.APIResultsQueue.test.js:7:1) FAIL tests/qunit/resources/mediawiki.util/accessKeyLabel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | ( function () { > 2 | QUnit.module( 'mediawiki.util: jquery.accessKeyLabel', QUnit.newMwEnvironment( { | ^ 3 | messages: { 4 | brackets: '[$1]', 5 | 'word-separator': ' ' at QUnit (tests/qunit/resources/mediawiki.util/accessKeyLabel.test.js:2:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.util/accessKeyLabel.test.js:106:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Api.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Api.test.js' However, Jest was able to find: './mmv.provider.Api.test.js' './mmv.provider.GuessedThumbnailInfo.test.js' './mmv.provider.Image.test.js' './mmv.provider.ImageInfo.test.js' './mmv.provider.ThumbnailInfo.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { Api } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.provider.Api', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Api.test.js:18:17) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/inspectors/ve.ui.FragmentInspector.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.ui.FragmentInspector (MW)', ve.test.utils.newMwEnvironment( { | ^ 8 | beforeEach() { 9 | // Mock XHR for mw.Api() 10 | this.server = this.sandbox.useFakeServer(); at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/inspectors/ve.ui.FragmentInspector.test.js:7:1) FAIL tests/qunit/resources/mediawiki.storage.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | const EXPIRY_PREFIX = '_EXPIRY_'; 3 | > 4 | QUnit.module( 'mediawiki.storage' ); | ^ 5 | 6 | QUnit.test( 'set/get(Object) with storage support', function ( assert ) { 7 | const data = {}, at QUnit (tests/qunit/resources/mediawiki.storage.test.js:4:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.storage.test.js:156:2) FAIL tests/jest/mediawiki.special.block/BlockLog.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/BlockLog.test.js:6:43) FAIL extensions/Cite/tests/qunit/ext.cite.referencePreviews/createReferenceGateway.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 10 | } 11 | > 12 | QUnit.module.if( 'ext.cite.referencePreviews#createReferenceGateway', | ^ 13 | mw.loader.getModuleNames().includes( 'ext.popups.main' ), 14 | { 15 | beforeEach: function () { at QUnit (extensions/Cite/tests/qunit/ext.cite.referencePreviews/createReferenceGateway.test.js:12:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ext.cite.referencePreviews/createReferenceGateway.test.js:181:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineTemplateWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlineTemplateWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor', ( assert ) => { 4 | const transclusion = new ve.dm.MWTransclusionModel(), at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineTemplateWidget.test.js:1:60) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.edit.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.edit', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.edit.test.js:1:50) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWImageModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.dm.MWImageModel' ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWImageModel.test.js:8:1) FAIL tests/qunit/resources/mediawiki.String.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.String', () => { | ^ 2 | const { byteLength } = require( 'mediawiki.String' ); 3 | 4 | QUnit.test.each( 'byteLength()', { at Object.<anonymous> (tests/qunit/resources/mediawiki.String.test.js:1:41) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/page-issues/parser.test.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 1 | ( function () { > 2 | const iconElement = document.createElement( 'div' ), | ^ 3 | pageIssuesParser = require( 'skins.minerva.scripts/page-issues/parser.js' ), 4 | extractMessage = pageIssuesParser.extract; 5 | at document (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/page-issues/parser.test.js:2:22) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/page-issues/parser.test.js:187:2) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.options.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.options', QUnit.newMwEnvironment(), ( hooks ) => { | ^ 2 | mw.config.set( { 3 | wgUserName: 'Foo' 4 | } ); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.options.test.js:1:79) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTemplateTitleInputWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 4 | } ) ); 5 | > 6 | QUnit.module( 've.ui.MWTemplateTitleInputWidget', ve.test.utils.newMwEnvironment( { | ^ 7 | messages: { 8 | // Force `templateDataInstalled` condition 9 | 'templatedata-doc-subpage': '(templatedata-doc-subpage)' at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTemplateTitleInputWidget.test.js:6:2) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/rest.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | let server; 6 | > 7 | QUnit.module( 'ext.checkUser.tempAccounts.rest', QUnit.newMwEnvironment( { | ^ 8 | beforeEach: function () { 9 | this.server = this.sandbox.useFakeServer(); 10 | this.server.respondImmediately = true; at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/rest.test.js:7:1) FAIL tests/qunit/resources/mediawiki.rcfilters/dm.FilterItem.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | /* eslint-disable camelcase */ 2 | ( function () { > 3 | QUnit.module( 'mediawiki.rcfilters - FilterItem' ); | ^ 4 | const rcfilters = require( 'mediawiki.rcfilters.filters.ui' ); 5 | 6 | QUnit.test( 'Initializing filter item', ( assert ) => { at QUnit (tests/qunit/resources/mediawiki.rcfilters/dm.FilterItem.test.js:3:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.rcfilters/dm.FilterItem.test.js:205:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.Document.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.dm.Document (MW)' ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.Document.test.js:8:1) FAIL skins/Vector/tests/jest/skins.vector.es6/main.test.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined > 1 | window.matchMedia = window.matchMedia || function () { | ^ 2 | return { 3 | matches: false, 4 | onchange: () => {} at Object.<anonymous> (skins/Vector/tests/jest/skins.vector.es6/main.test.js:1:54) FAIL tests/qunit/resources/mediawiki.cookie.test.js ● Test suite failed to run Cannot find module 'mediawiki.cookie' from 'tests/qunit/resources/mediawiki.cookie.test.js' 11 | secure: false 12 | }, > 13 | mwCookie = require( 'mediawiki.cookie' ), | ^ 14 | setDefaults = mwCookie.setDefaults, 15 | expiryDate = new Date(); 16 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.cookie.test.js:13:14) at Object.<anonymous> (tests/qunit/resources/mediawiki.cookie.test.js:183:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Image.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Image.test.js' However, Jest was able to find: './mmv.provider.Api.test.js' './mmv.provider.GuessedThumbnailInfo.test.js' './mmv.provider.Image.test.js' './mmv.provider.ImageInfo.test.js' './mmv.provider.ThumbnailInfo.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { ImageProvider } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.provider.Image', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/provider/mmv.provider.Image.test.js:18:27) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/ipRevealUtils.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 4 | const autoRevealPreferenceName = 'checkuser-temporary-account-enable-auto-reveal'; 5 | > 6 | QUnit.module( 'ext.checkUser.tempAccounts.ipRevealUtils', QUnit.newMwEnvironment( { | ^ 7 | beforeEach() { 8 | this.dateNow = sinon.stub( Date, 'now' ); 9 | at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/ipRevealUtils.test.js:6:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/pages/ve.ui.MWParameterPage.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWParameterPage', ve.test.utils.newMwEnvironment ); | ^ 2 | 3 | [ 4 | [ undefined, '', ve.ui.MWLazyMultilineTextInputWidget ], at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/pages/ve.ui.MWParameterPage.test.js:1:72) FAIL tests/jest/mediawiki.special.block/UserLookup.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/UserLookup.test.js:6:60) FAIL tests/qunit/resources/mediawiki.visibleTimeout.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.visibleTimeout', QUnit.newMwEnvironment( { | ^ 2 | beforeEach: function () { 3 | // Document with just enough stuff to make the tests work. 4 | const listeners = []; at Object.<anonymous> (tests/qunit/resources/mediawiki.visibleTimeout.test.js:1:67) FAIL skins/Vector/tests/jest/stickyHeader.test.js ● Test suite failed to run Cannot find module 'mustache' from 'skins/Vector/tests/jest/stickyHeader.test.js' > 1 | const mustache = require( 'mustache' ); | ^ 2 | const fs = require( 'fs' ); 3 | const stickyHeaderTemplate = fs.readFileSync( 'includes/templates/StickyHeader.mustache', 'utf8' ); 4 | const buttonTemplate = fs.readFileSync( 'includes/templates/Button.mustache', 'utf8' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (skins/Vector/tests/jest/stickyHeader.test.js:1:39) FAIL tests/qunit/resources/startup/mw.Map.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | const arry = []; 6 | > 7 | QUnit.module( 'mw.Map' ); | ^ 8 | 9 | QUnit.test( 'Store simple string key', ( assert ) => { 10 | const conf = new mw.Map(); at QUnit (tests/qunit/resources/startup/mw.Map.test.js:7:2) at Object.<anonymous> (tests/qunit/resources/startup/mw.Map.test.js:130:2) FAIL extensions/CheckUser/tests/jest/components/IPAutoRevealOffDialog.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccounts/components/IPAutoRevealOffDialog.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 16 | } ) ); 17 | > 18 | const IPAutoRevealOffDialog = require( '../../../modules/ext.checkUser.tempAccounts/components/IPAutoRevealOffDialog.vue' ); | ^ 19 | const { nextTick } = require( 'vue' ); 20 | const utils = require( '@vue/test-utils' ); 21 | const { CdxDialog } = require( '@wikimedia/codex' ); at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/IPAutoRevealOffDialog.test.js:18:31) FAIL skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js ● isNightModeGadgetEnabled › should return false if no gadgets are installed ReferenceError: mw is not defined 9 | beforeEach( () => { 10 | // https://github.com/wikimedia/mw-node-qunit/pull/38 > 11 | mw.loader.getState = () => null; | ^ 12 | } ); 13 | 14 | it( 'should return false if no gadgets are installed', () => { at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:11:3) ● isNightModeGadgetEnabled › should return false if the gadgets are installed but not enabled ReferenceError: mw is not defined 9 | beforeEach( () => { 10 | // https://github.com/wikimedia/mw-node-qunit/pull/38 > 11 | mw.loader.getState = () => null; | ^ 12 | } ); 13 | 14 | it( 'should return false if no gadgets are installed', () => { at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:11:3) ● isNightModeGadgetEnabled › should return true if the gadgets are enabled ReferenceError: mw is not defined 9 | beforeEach( () => { 10 | // https://github.com/wikimedia/mw-node-qunit/pull/38 > 11 | mw.loader.getState = () => null; | ^ 12 | } ); 13 | 14 | it( 'should return false if no gadgets are installed', () => { at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:11:3) ● disableNightModeForGadget › should disable night mode The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 33 | describe( 'disableNightModeForGadget', () => { 34 | beforeEach( () => { > 35 | document.documentElement.classList.remove( 'skin-theme-clientpref--excluded' ); | ^ 36 | document.documentElement.classList.remove( 'skin-theme-clientpref-night' ); 37 | document.documentElement.classList.remove( 'skin-theme-clientpref-os' ); 38 | } ); at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:35:3) ● disableNightModeForGadget › should disable automatic mode The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 33 | describe( 'disableNightModeForGadget', () => { 34 | beforeEach( () => { > 35 | document.documentElement.classList.remove( 'skin-theme-clientpref--excluded' ); | ^ 36 | document.documentElement.classList.remove( 'skin-theme-clientpref-night' ); 37 | document.documentElement.classList.remove( 'skin-theme-clientpref-os' ); 38 | } ); at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:35:3) ● disableNightModeForGadget › should add the excluded class The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 33 | describe( 'disableNightModeForGadget', () => { 34 | beforeEach( () => { > 35 | document.documentElement.classList.remove( 'skin-theme-clientpref--excluded' ); | ^ 36 | document.documentElement.classList.remove( 'skin-theme-clientpref-night' ); 37 | document.documentElement.classList.remove( 'skin-theme-clientpref-os' ); 38 | } ); at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:35:3) ● alterDisableLink › should exit early if the gadget names are empty ReferenceError: mw is not defined 67 | 68 | it( 'should exit early if the gadget names are empty', () => { > 69 | jest.spyOn( mw, 'msg' ).mockImplementation( () => '' ); | ^ 70 | 71 | const p = document.createElement( 'p' ); 72 | const a = document.createElement( 'a' ); at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:69:15) ● alterDisableLink › should leave the surrounding element unaltered The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 83 | 84 | it( 'should leave the surrounding element unaltered', () => { > 85 | const p = document.createElement( 'p' ); | ^ 86 | const a = document.createElement( 'a' ); 87 | p.appendChild( a ); 88 | at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:85:13) ● alterDisableLink › should strip the title and href attributes The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 95 | 96 | it( 'should strip the title and href attributes', () => { > 97 | const p = document.createElement( 'p' ); | ^ 98 | const a = document.createElement( 'a' ); 99 | p.appendChild( a ); 100 | at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:97:13) ● alterDisableLink › should make the link display inline The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 109 | 110 | it( 'should make the link display inline', () => { > 111 | const p = document.createElement( 'p' ); | ^ 112 | const a = document.createElement( 'a' ); 113 | p.appendChild( a ); 114 | at Object.document (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:111:13) ● alterExclusionMessage › should remove the existing text from the notice ReferenceError: mw is not defined 123 | describe( 'alterExclusionMessage', () => { 124 | beforeEach( () => { > 125 | jest.spyOn( mw.loader, 'using' ).mockImplementation( () => ( { | ^ 126 | then: ( fn ) => fn() 127 | } ) ); 128 | at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:125:15) ● alterExclusionMessage › should not target other client prefs ReferenceError: mw is not defined 123 | describe( 'alterExclusionMessage', () => { 124 | beforeEach( () => { > 125 | jest.spyOn( mw.loader, 'using' ).mockImplementation( () => ( { | ^ 126 | then: ( fn ) => fn() 127 | } ) ); 128 | at Object.mw (skins/Vector/tests/jest/skins.vector.js/disableNightModeIfGadget.test.js:125:15) FAIL extensions/CheckUser/tests/jest/components/app.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/App.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 6 | } ), { virtual: true } ); 7 | > 8 | const App = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/App.vue' ), | ^ 9 | utils = require( '@vue/test-utils' ), 10 | { waitFor } = require( '../utils.js' ); 11 | at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/app.test.js:8:13) FAIL extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Repo.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Repo.test.js' However, Jest was able to find: './mmv.model.Image.test.js' './mmv.model.License.test.js' './mmv.model.Repo.test.js' './mmv.model.TaskQueue.test.js' './mmv.model.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { Repo, ForeignApiRepo, ForeignDbRepo } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.model.Repo', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.Repo.test.js:18:49) FAIL tests/qunit/resources/jquery.textSelection.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'jquery.textSelection', () => { | ^ 2 | const sig = { 3 | pre: '--~~~~' 4 | }; at Object.<anonymous> (tests/qunit/resources/jquery.textSelection.test.js:1:45) FAIL extensions/DiscussionTools/tests/qunit/modifier.test.js ● Test suite failed to run Cannot find module 'ext.discussionTools.init' from 'extensions/DiscussionTools/tests/qunit/testUtils.js' Require stack: extensions/DiscussionTools/tests/qunit/testUtils.js extensions/DiscussionTools/tests/qunit/modifier.test.js > 1 | const utils = require( 'ext.discussionTools.init' ).utils; | ^ 2 | 3 | module.exports = {}; 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (extensions/DiscussionTools/tests/qunit/testUtils.js:1:58) at Object.<anonymous> (extensions/DiscussionTools/tests/qunit/modifier.test.js:2:41) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingDialogStepper.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingStepper.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | 'use strict'; 2 | > 3 | const TempAccountsOnboardingStepper = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingStepper.vue' ), | ^ 4 | utils = require( '@vue/test-utils' ); 5 | 6 | const renderComponent = ( props ) => { at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/tempAccountsOnboardingDialogStepper.test.js:3:39) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.permission.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.permission.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { Permission } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'Permission', QUnit.newMwEnvironment( { 21 | beforeEach: function () { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.permission.test.js:18:24) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.test.js ● Test suite failed to run ReferenceError: OO is not defined 32 | this.popup.connect( this, { toggle: 'onVisibilityChanged' } ); 33 | } > 34 | OO.inheritClass( BlockDetailsPopupButtonWidget, OO.ui.PopupButtonWidget ); | ^ 35 | 36 | /** 37 | * Promise holding resolved block details, reused between different popups on the same page. at Object.OO (extensions/CheckUser/modules/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.js:34:1) at Object.require (extensions/CheckUser/tests/qunit/ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.test.js:3:39) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.download.pane.test.js ● Test suite failed to run Cannot find module 'mmv.ui.reuse' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.download.pane.test.js' 16 | */ 17 | > 18 | const { Download: DownloadPane, Utils } = require( 'mmv.ui.reuse' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.download.pane', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.download.pane.test.js:18:43) FAIL tests/qunit/resources/mediawiki.api/mediawiki.rest.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.rest', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.rest.test.js:1:46) FAIL tests/jest/mediawiki.special.block/ExpiryField.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/ExpiryField.test.js:5:29) FAIL tests/qunit/resources/mediawiki.widgets/UserInputWidget/mediawiki.widgets.UserInputWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | */ 4 | > 5 | QUnit.module( 'mediawiki.widgets.UserInputWidget' ); | ^ 6 | 7 | ( function () { 8 | const widgetWithDefaults = new mw.widgets.UserInputWidget( {} ); at Object.QUnit (tests/qunit/resources/mediawiki.widgets/UserInputWidget/mediawiki.widgets.UserInputWidget.test.js:5:1) FAIL tests/qunit/resources/mediawiki.cldr.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 60 | }; 61 | > 62 | QUnit.module( 'mediawiki.cldr', QUnit.newMwEnvironment() ); | ^ 63 | 64 | function pluralTest( langCode, tests ) { 65 | QUnit.test( 'Plural Test for ' + langCode, ( assert ) => { at QUnit (tests/qunit/resources/mediawiki.cldr.test.js:62:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.cldr.test.js:83:2) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceEditPanel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | 3 | ( function () { > 4 | QUnit.module( 've.ui.MWReferenceEditPanel (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 5 | 6 | function getSimpleNode( doc ) { 7 | const node = new ve.dm.MWReferenceNode( { at QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceEditPanel.test.js:4:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceEditPanel.test.js:105:2) FAIL tests/qunit/resources/mediawiki.deflate.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.deflate', () => { | ^ 2 | let seed = 1234567890; 3 | function getPseudoRandom() { 4 | seed = seed * 16807 % 2147483646; at Object.<anonymous> (tests/qunit/resources/mediawiki.deflate.test.js:1:42) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/pages/ve.ui.MWAddParameterPage.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWAddParameterPage', ve.test.utils.newMwEnvironment() ); | ^ 2 | 3 | QUnit.test( 'Input event handlers', ( assert ) => { 4 | const transclusion = new ve.dm.MWTransclusionModel(), at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/pages/ve.ui.MWAddParameterPage.test.js:1:77) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlineWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor', ( assert ) => { 4 | const widget = new ve.ui.MWTransclusionOutlineWidget(); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineWidget.test.js:1:52) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.MWGroupReferences.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | 3 | ( function () { > 4 | QUnit.module( 've.dm.MWGroupReferences (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 5 | 6 | const doc = ve.dm.citeExample.createExampleDocument( 'references' ); 7 | const docRefs = ve.dm.MWDocumentReferences.static.refsForDoc( doc ); at QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWGroupReferences.test.js:4:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWGroupReferences.test.js:126:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/actions/ve.ui.MWLinkAction.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.ui.MWLinkAction' ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/actions/ve.ui.MWLinkAction.test.js:8:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.utils.test.js ● Test suite failed to run Cannot find module 'mmv.ui.reuse' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.utils.test.js' 16 | */ 17 | > 18 | const { Utils } = require( 'mmv.ui.reuse' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.reuse.utils', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.utils.test.js:18:19) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.category.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.category', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.category.test.js:1:54) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferenceModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.dm.MWReferenceModel (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 8 | 9 | /* Tests */ 10 | at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferenceModel.test.js:7:1) FAIL skins/Vector/tests/jest/restSearchClient.test.js ● restApiSearchClient › 2 results The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson [as fetchByTitle] (skins/Vector/resources/skins.vector.search/restSearchClient.js:104:19) at Object.fetchByTitle (skins/Vector/tests/jest/restSearchClient.test.js:58:77) ● restApiSearchClient › 0 results The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson [as fetchByTitle] (skins/Vector/resources/skins.vector.search/restSearchClient.js:104:19) at Object.fetchByTitle (skins/Vector/tests/jest/restSearchClient.test.js:89:77) ● restApiSearchClient › network error The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson [as fetchByTitle] (skins/Vector/resources/skins.vector.search/restSearchClient.js:104:19) at Object.fetchByTitle (skins/Vector/tests/jest/restSearchClient.test.js:111:65) FAIL tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js ● restApiSearchClient › 2 results The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson [as fetchByTitle] (resources/src/mediawiki.skinning.typeaheadSearch/restSearchClient.js:104:19) at Object.fetchByTitle (tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js:58:77) ● restApiSearchClient › 0 results The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson [as fetchByTitle] (resources/src/mediawiki.skinning.typeaheadSearch/restSearchClient.js:104:19) at Object.fetchByTitle (tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js:89:77) ● restApiSearchClient › network error The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson [as fetchByTitle] (resources/src/mediawiki.skinning.typeaheadSearch/restSearchClient.js:104:19) at Object.fetchByTitle (tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js:111:65) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | 7 | { > 8 | QUnit.module( 've.dm.MWTransclusionModel', ve.test.utils.newMwEnvironment( { | ^ 9 | beforeEach() { 10 | // Mock XHR for mw.Api() 11 | this.server = this.sandbox.useFakeServer(); at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionModel.test.js:8:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { StripeButtons } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.StripeButtons', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js:18:27) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.progressBar.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.progressBar.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { ProgressBar } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.ProgressBar', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.progressBar.test.js:18:25) FAIL skins/Vector/tests/jest/skins.vector.legacy.js/portlets.test.js ● Test suite failed to run Cannot find module 'mustache' from 'skins/Vector/tests/jest/skins.vector.legacy.js/portlets.test.js' 1 | const portlets = require( '../../../resources/skins.vector.legacy.js/portlets.js' ); > 2 | const mustache = require( 'mustache' ); | ^ 3 | const fs = require( 'fs' ); 4 | const menuTemplate = fs.readFileSync( 'includes/templates/LegacyMenu.mustache', 'utf8' ); 5 | const menuContentsTemplate = fs.readFileSync( 'includes/templates/MenuContents.mustache', 'utf8' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (skins/Vector/tests/jest/skins.vector.legacy.js/portlets.test.js:2:18) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.Transaction.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 8 | */ 9 | > 10 | QUnit.module( 've.dm.Transaction (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 11 | 12 | // FIXME: Duplicates test runner; should be using a data provider 13 | QUnit.test( 'newFromDocumentInsertion with references', ( assert ) => { at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.Transaction.test.js:10:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/actions/ve.ui.FormatAction.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.ui.FormatAction (MW)', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | QUnit.test.each( 'convert (MW-specific types)', 11 | [ at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/actions/ve.ui.FormatAction.test.js:8:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.ClipboardHandler.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.ce.ClipboardHandler (MW)', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.ClipboardHandler.test.js:8:1) FAIL extensions/Cite/tests/qunit/ext.cite.referencePreviews/isReferencePreviewsEnabled.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 24 | const options = { get: () => '1' }; 25 | > 26 | QUnit.module.if( 'ext.cite.referencePreviews#isReferencePreviewsEnabled', | ^ 27 | mw.loader.getModuleNames().includes( 'ext.popups.main' ) ); 28 | 29 | QUnit.test( 'relevant combinations of anonymous flags', ( assert ) => { at QUnit (extensions/Cite/tests/qunit/ext.cite.referencePreviews/isReferencePreviewsEnabled.test.js:26:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ext.cite.referencePreviews/isReferencePreviewsEnabled.test.js:110:2) FAIL extensions/Cite/tests/qunit/ext.cite.referencePreviews/renderer.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | const previewTypes = { TYPE_REFERENCE: 'reference' }; 6 | > 7 | QUnit.module.if( 'ext.cite.referencePreviews#renderer', | ^ 8 | mw.loader.getModuleNames().includes( 'ext.popups.main' ), 9 | { 10 | before() { at QUnit (extensions/Cite/tests/qunit/ext.cite.referencePreviews/renderer.test.js:7:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ext.cite.referencePreviews/renderer.test.js:89:2) FAIL tests/qunit/resources/mediawiki.widgets/Table/mediawiki.widgets.TableWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | */ 4 | > 5 | QUnit.module( 'mediawiki.widgets.TableWidget' ); | ^ 6 | 7 | ( function () { 8 | const widgetA = new mw.widgets.TableWidget( { at Object.QUnit (tests/qunit/resources/mediawiki.widgets/Table/mediawiki.widgets.TableWidget.test.js:5:1) FAIL skins/Vector/tests/jest/popupNotification.test.js ● Popup Notification › add TypeError: Cannot set properties of undefined (setting 'matchMedia') 23 | describe( 'Popup Notification', () => { 24 | beforeEach( () => { > 25 | global.window.matchMedia = jest.fn( () => ( {} ) ); | ^ 26 | document.body.style = 'direction: ltr'; 27 | jest.spyOn( mw.loader, 'using' ) 28 | .mockImplementation( () => Promise.resolve() ); at Object.<anonymous> (skins/Vector/tests/jest/popupNotification.test.js:25:27) ● Popup Notification › hide TypeError: Cannot set properties of undefined (setting 'matchMedia') 23 | describe( 'Popup Notification', () => { 24 | beforeEach( () => { > 25 | global.window.matchMedia = jest.fn( () => ( {} ) ); | ^ 26 | document.body.style = 'direction: ltr'; 27 | jest.spyOn( mw.loader, 'using' ) 28 | .mockImplementation( () => Promise.resolve() ); at Object.<anonymous> (skins/Vector/tests/jest/popupNotification.test.js:25:27) ● Popup Notification › show TypeError: Cannot set properties of undefined (setting 'matchMedia') 23 | describe( 'Popup Notification', () => { 24 | beforeEach( () => { > 25 | global.window.matchMedia = jest.fn( () => ( {} ) ); | ^ 26 | document.body.style = 'direction: ltr'; 27 | jest.spyOn( mw.loader, 'using' ) 28 | .mockImplementation( () => Promise.resolve() ); at Object.<anonymous> (skins/Vector/tests/jest/popupNotification.test.js:25:27) ● Popup Notification › hideAll TypeError: Cannot set properties of undefined (setting 'matchMedia') 23 | describe( 'Popup Notification', () => { 24 | beforeEach( () => { > 25 | global.window.matchMedia = jest.fn( () => ( {} ) ); | ^ 26 | document.body.style = 'direction: ltr'; 27 | jest.spyOn( mw.loader, 'using' ) 28 | .mockImplementation( () => Promise.resolve() ); at Object.<anonymous> (skins/Vector/tests/jest/popupNotification.test.js:25:27) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWWikitextStringTransferHandler.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 8 | */ 9 | > 10 | QUnit.module( 've.ui.MWWikitextStringTransferHandler (Cite)', ve.test.utils.newMwEnvironment( { | ^ 11 | beforeEach: function () { 12 | // Mock XHR for mw.Api() 13 | this.server = this.sandbox.useFakeServer(); at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWWikitextStringTransferHandler.test.js:10:1) FAIL extensions/DiscussionTools/tests/qunit/parser.test.js ● Test suite failed to run Cannot find module 'ext.discussionTools.init' from 'extensions/DiscussionTools/tests/qunit/testUtils.js' Require stack: extensions/DiscussionTools/tests/qunit/testUtils.js extensions/DiscussionTools/tests/qunit/parser.test.js > 1 | const utils = require( 'ext.discussionTools.init' ).utils; | ^ 2 | 3 | module.exports = {}; 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (extensions/DiscussionTools/tests/qunit/testUtils.js:1:58) at Object.require (extensions/DiscussionTools/tests/qunit/parser.test.js:3:14) FAIL skins/Vector/tests/jest/skins.vector.js/tables.test.js ● tables › wraps table with div The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 3 | describe( 'tables', () => { 4 | test( 'wraps table with div', () => { > 5 | document.body.innerHTML = ` | ^ 6 | <div class="mw-parser-output"> 7 | <table class="wikitable"> 8 | <tbody><tr><th>table table table</th></tr></tbody> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:5:3) ● tables › wraps multiple table with div The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 16 | 17 | test( 'wraps multiple table with div', () => { > 18 | document.body.innerHTML = ` | ^ 19 | <div class="mw-parser-output"> 20 | <table class="wikitable"> 21 | <tbody><tr><th>table table table</th></tr></tbody> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:18:3) ● tables › doesnt wrap nested tables The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 36 | 37 | test( 'doesnt wrap nested tables', () => { > 38 | document.body.innerHTML = ` | ^ 39 | <div class="mw-parser-output"> 40 | <table class="wikitable"> 41 | <tbody> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:38:3) ● tables › doesnt wrap tables that are not wikitables The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 52 | 53 | test( 'doesnt wrap tables that are not wikitables', () => { > 54 | document.body.innerHTML = ` | ^ 55 | <div class="mw-parser-output"> 56 | <table> 57 | <tbody> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:54:3) ● tables › doesnt wrap tables that already have noresize The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 68 | 69 | test( 'doesnt wrap tables that already have noresize', () => { > 70 | document.body.innerHTML = ` | ^ 71 | <div class="mw-parser-output"> 72 | <div class="noresize"> 73 | <table class="wikitable"> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:70:3) ● tables › doesnt wrap tables that are already wrapped The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 85 | 86 | test( 'doesnt wrap tables that are already wrapped', () => { > 87 | document.body.innerHTML = ` | ^ 88 | <div class="mw-parser-output"> 89 | <div> 90 | <table class="wikitable"> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:87:3) ● tables › doesnt wrap floated tables The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 102 | 103 | test( 'doesnt wrap floated tables', () => { > 104 | document.body.innerHTML = ` | ^ 105 | <div class="mw-parser-output"> 106 | <table class="wikitable" style="float:right"> 107 | <tbody> at Object.document (skins/Vector/tests/jest/skins.vector.js/tables.test.js:104:3) FAIL extensions/Cite/tests/qunit/ext.cite.highlighting.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | /* eslint-disable no-jquery/no-global-selector */ 4 | ( function () { > 5 | QUnit.module( 'ext.cite.highlighting (Cite)', { | ^ 6 | beforeEach: function () { 7 | const $content = $( ` 8 | <div> at QUnit (extensions/Cite/tests/qunit/ext.cite.highlighting.test.js:5:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ext.cite.highlighting.test.js:67:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/dialogs/ve.ui.MWTransclusionDialog.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | 7 | { > 8 | QUnit.module( 've.ui.MWTransclusionDialog', ve.test.utils.newMwEnvironment( { | ^ 9 | config: { 10 | // Set config variable to activate new sidebar feature 11 | // TODO: remove this when sidebar feature will be default at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/dialogs/ve.ui.MWTransclusionDialog.test.js:8:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.SurfaceFragment.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.dm.SurfaceFragment (MW)', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.SurfaceFragment.test.js:8:1) FAIL skins/MinervaNeue/tests/jest/skins.minerva.scripts/reportIfNightModeWasDisabledOnPage.test.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 3 | '../../../resources/skins.minerva.scripts/reportIfNightModeWasDisabledOnPage.js' 4 | ); > 5 | const nightModeDisabledDoc = document.createElement( 'html' ); | ^ 6 | nightModeDisabledDoc.setAttribute( 'class', 'skin-night-mode-page-disabled' ); 7 | 8 | const userOptionsEnabled = new Map(); at Object.document (skins/MinervaNeue/tests/jest/skins.minerva.scripts/reportIfNightModeWasDisabledOnPage.test.js:5:30) FAIL tests/qunit/resources/startup/clientprefs.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'startup/clientprefs', () => { | ^ 2 | // See /resources/src/startup/clientprefs.js 3 | const clientprefs = mw.clientprefs; 4 | at Object.<anonymous> (tests/qunit/resources/startup/clientprefs.test.js:1:44) FAIL tests/jest/mediawiki.special.block/util.test.js ● util › sanitizeRange (IPv4 range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv4 range 2) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv4 large range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv4 intermediate range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv4 silly range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv4 non-range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 range 2) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 large range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 intermediate range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 silly range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › sanitizeRange (IPv6 non range) ReferenceError: mw is not defined 71 | it.each( santizeRangeTestCases )( 'sanitizeRange ($title)', 72 | ( { input, expected, sanitizeIP, isIPv4Address, isIPv6Address } ) => { > 73 | mw.util.sanitizeIP = jest.fn().mockReturnValue( sanitizeIP || input ); | ^ 74 | mw.util.isIPv4Address = jest.fn().mockReturnValue( !!isIPv4Address ); 75 | mw.util.isIPv6Address = jest.fn().mockReturnValue( !!isIPv6Address ); 76 | expect( util.sanitizeRange( input ) ).toBe( expected ); at mw (tests/jest/mediawiki.special.block/util.test.js:73:4) ● util › formatTimestamp ReferenceError: mw is not defined 92 | 93 | it.each( formatTimestampCases )( 'formatTimestamp', ( { input, expected } ) => { > 94 | mw.util.isInfinity = jest.fn().mockReturnValue( input === 'infinity' ); | ^ 95 | expect( util.formatTimestamp( input ) ).toBe( expected ); 96 | } ); 97 | } ); at mw (tests/jest/mediawiki.special.block/util.test.js:94:3) ● util › formatTimestamp ReferenceError: mw is not defined 92 | 93 | it.each( formatTimestampCases )( 'formatTimestamp', ( { input, expected } ) => { > 94 | mw.util.isInfinity = jest.fn().mockReturnValue( input === 'infinity' ); | ^ 95 | expect( util.formatTimestamp( input ) ).toBe( expected ); 96 | } ); 97 | } ); at mw (tests/jest/mediawiki.special.block/util.test.js:94:3) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceSearchWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | 3 | ( function () { > 4 | QUnit.module( 've.ui.MWReferenceSearchWidget (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 5 | 6 | function getDocRefsMock( hasNode ) { 7 | const listKey = 'literal/foo'; at QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceSearchWidget.test.js:4:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceSearchWidget.test.js:85:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/nodes/ve.dm.MWTransclusionNode.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.dm.MWTransclusionNode' ); | ^ 9 | 10 | QUnit.test.each( 'getWikitext', { 11 | 'mix of numbered and named parameters': { at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/nodes/ve.dm.MWTransclusionNode.test.js:8:1) FAIL skins/Vector/tests/jest/skins.vector.js/portlets.test.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 157 | // Enhance previously added items. 158 | Array.prototype.forEach.call( > 159 | document.querySelectorAll( '.mw-list-item-js' ), | ^ 160 | ( item ) => { 161 | addPortletLinkHandler( item, { 162 | id: item.getAttribute( 'id' ) at Object.document (skins/Vector/resources/skins.vector.js/dropdownMenus.js:159:2) at Object.<anonymous> (skins/Vector/resources/skins.vector.js/portlets.js:1:54) at Object.<anonymous> (skins/Vector/tests/jest/skins.vector.js/portlets.test.js:1:77) FAIL tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js ● abort() using AbortController › Aborting an unfinished request throws an AbortError The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:12:28) ● abort() using AbortController › Aborting an unfinished request throws an AbortError expect.assertions(1) Expected one assertion to be called but received zero assertion calls. 8 | describe( 'abort() using AbortController', () => { 9 | test( 'Aborting an unfinished request throws an AbortError', async () => { > 10 | expect.assertions( 1 ); | ^ 11 | 12 | const { abort, fetch } = fetchJson( url ); 13 | at Object.assertions (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:10:10) ● fetch() using window.fetch › 200 without init param passed The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:54:21) ● fetch() using window.fetch › 200 with init param passed The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:66:21) ● fetch() using window.fetch › 404 response The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 27 | // so replacing it with no-op if it doesn't exist. 28 | // eslint-disable-next-line compat/compat > 29 | const controller = window.AbortController ? | ^ 30 | // eslint-disable-next-line compat/compat 31 | new AbortController() : 32 | nullAbortController; at window (resources/src/mediawiki.skinning.typeaheadSearch/fetch.js:29:21) at Object.fetchJson (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:82:21) ● fetch() using window.fetch › 404 response expect.assertions(1) Expected one assertion to be called but received zero assertion calls. 79 | 80 | test( '404 response', async () => { > 81 | expect.assertions( 1 ); | ^ 82 | const { fetch } = fetchJson( '//en.wikipedia.org/doesNotExist' ); 83 | 84 | await expect( fetch ) at Object.assertions (tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js:81:10) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.ipInfo.hooks/ext.ipinfo.infobox.widget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | const addSpecialGlobalContributionsLink = require( '../../../modules/ext.checkUser.ipInfo.hooks/infobox.js' ); 3 | > 4 | QUnit.module( 'ext.checkUser.ipInfo.hooks', QUnit.newMwEnvironment( { | ^ 5 | beforeEach: function () { 6 | // simulate setting wgAutoCreateTempUser to { enabled: true, matchPattern: '~$1' } 7 | // (setting it in mw.config has no effect, so we need to at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser.ipInfo.hooks/ext.ipinfo.infobox.widget.test.js:4:1) FAIL tests/qunit/resources/mediawiki.base/track.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.base/track', () => { | ^ 2 | 3 | QUnit.test( 'track', ( assert ) => { 4 | const sequence = []; at Object.<anonymous> (tests/qunit/resources/mediawiki.base/track.test.js:1:45) FAIL tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignApi.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.ForeignApi', ( hooks ) => { | ^ 2 | const CoreForeignApi = require( 'mediawiki.ForeignApi.core' ).ForeignApi; 3 | 4 | hooks.beforeEach( function () { at Object.<anonymous> (tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignApi.test.js:1:52) FAIL skins/Vector/tests/jest/fetch.test.js ● abort() using AbortController › Aborting an unfinished request throws an AbortError The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson (skins/Vector/tests/jest/fetch.test.js:12:28) ● abort() using AbortController › Aborting an unfinished request throws an AbortError expect.assertions(1) Expected one assertion to be called but received zero assertion calls. 8 | describe( 'abort() using AbortController', () => { 9 | test( 'Aborting an unfinished request throws an AbortError', async () => { > 10 | expect.assertions( 1 ); | ^ 11 | 12 | const { abort, fetch } = fetchJson( url ); 13 | at Object.assertions (skins/Vector/tests/jest/fetch.test.js:10:10) ● fetch() using window.fetch › 200 without init param passed The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson (skins/Vector/tests/jest/fetch.test.js:54:21) ● fetch() using window.fetch › 200 with init param passed The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson (skins/Vector/tests/jest/fetch.test.js:66:21) ● fetch() using window.fetch › 404 response The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 26 | // https://caniuse.com/abortcontroller 27 | // so replacing it with no-op if it doesn't exist. > 28 | const controller = window.AbortController ? | ^ 29 | new AbortController() : 30 | nullAbortController; 31 | at window (skins/Vector/resources/skins.vector.search/fetch.js:28:21) at Object.fetchJson (skins/Vector/tests/jest/fetch.test.js:82:21) ● fetch() using window.fetch › 404 response expect.assertions(1) Expected one assertion to be called but received zero assertion calls. 79 | 80 | test( '404 response', async () => { > 81 | expect.assertions( 1 ); | ^ 82 | const { fetch } = fetchJson( '//en.wikipedia.org/doesNotExist' ); 83 | 84 | await expect( fetch ) at Object.assertions (skins/Vector/tests/jest/fetch.test.js:81:10) FAIL skins/Vector/tests/jest/skins.vector.clientPreferences.test.js ● clientPreferences › render empty The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 4 | describe( 'clientPreferences', () => { 5 | beforeEach( () => { > 6 | document.body.innerHTML = ''; | ^ 7 | cp = document.createElement( 'div' ); 8 | cp.id = 'cp'; 9 | document.body.appendChild( cp ); at Object.document (skins/Vector/tests/jest/skins.vector.clientPreferences.test.js:6:3) ● clientPreferences › render font size The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 4 | describe( 'clientPreferences', () => { 5 | beforeEach( () => { > 6 | document.body.innerHTML = ''; | ^ 7 | cp = document.createElement( 'div' ); 8 | cp.id = 'cp'; 9 | document.body.appendChild( cp ); at Object.document (skins/Vector/tests/jest/skins.vector.clientPreferences.test.js:6:3) ● clientPreferences › doesnt render exclusion notice if the msg key doesnt exist The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 4 | describe( 'clientPreferences', () => { 5 | beforeEach( () => { > 6 | document.body.innerHTML = ''; | ^ 7 | cp = document.createElement( 'div' ); 8 | cp.id = 'cp'; 9 | document.body.appendChild( cp ); at Object.document (skins/Vector/tests/jest/skins.vector.clientPreferences.test.js:6:3) ● clientPreferences › render toggle The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 4 | describe( 'clientPreferences', () => { 5 | beforeEach( () => { > 6 | document.body.innerHTML = ''; | ^ 7 | cp = document.createElement( 'div' ); 8 | cp.id = 'cp'; 9 | document.body.appendChild( cp ); at Object.document (skins/Vector/tests/jest/skins.vector.clientPreferences.test.js:6:3) FAIL tests/qunit/resources/mediawiki.base/html.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.base/html', () => { | ^ 2 | 3 | QUnit.test( 'escape', ( assert ) => { 4 | assert.throws( at Object.<anonymous> (tests/qunit/resources/mediawiki.base/html.test.js:1:44) FAIL tests/qunit/resources/testrunner.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'testrunner', () => { | ^ 2 | QUnit.test( 'assert.htmlEqual', ( assert ) => { 3 | assert.htmlEqual( 4 | '<div><p class="some classes" data-length="10">Child paragraph with <a href="http://example.com">A link</a></p>Regular text<span>A span</span></div>', at Object.<anonymous> (tests/qunit/resources/testrunner.test.js:1:35) FAIL tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignRest.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.ForeignRest', ( hooks ) => { | ^ 2 | const CoreForeignApi = require( 'mediawiki.ForeignApi.core' ).ForeignApi; 3 | const CoreForeignRest = require( 'mediawiki.ForeignApi.core' ).ForeignRest; 4 | at Object.<anonymous> (tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignRest.test.js:1:53) FAIL tests/qunit/resources/startup/mw.requestIdleCallback.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | ( function () { > 2 | QUnit.module( 'mw.requestIdleCallback', QUnit.newMwEnvironment( { | ^ 3 | beforeEach: function () { 4 | const clock = this.clock = this.sandbox.useFakeTimers(); 5 | at QUnit (tests/qunit/resources/startup/mw.requestIdleCallback.test.js:2:2) at Object.<anonymous> (tests/qunit/resources/startup/mw.requestIdleCallback.test.js:105:2) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/layouts/ve.ui.MWTwoPaneTransclusionDialogLayout.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTwoPaneTransclusionDialogLayout', ve.test.utils.newMwEnvironment() ); | ^ 2 | 3 | const createLayout = function () { 4 | return new ve.ui.MWTwoPaneTransclusionDialogLayout( { continuous: true } ); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/layouts/ve.ui.MWTwoPaneTransclusionDialogLayout.test.js:1:92) FAIL vendor/wikimedia/parsoid/bin/domdiff.test.js ● Test suite failed to run Cannot find module './lib/utils/promise.js' from 'vendor/wikimedia/parsoid/core-upgrade.js' Require stack: vendor/wikimedia/parsoid/core-upgrade.js vendor/wikimedia/parsoid/bin/domdiff.test.js 2 | 3 | // Register prfun's Promises with node-pn > 4 | var Promise = require('./lib/utils/promise.js'); | ^ 5 | require('pn/_promise')(Promise); // This only needs to be done once. 6 | 7 | // Comments below annotate the highest lts version of node for which the at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (vendor/wikimedia/parsoid/core-upgrade.js:4:15) at Object.require (vendor/wikimedia/parsoid/bin/domdiff.test.js:5:1) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ce.ClipboardHandler.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.ce.ClipboardHandler (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ce.ClipboardHandler.test.js:8:1) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/generateData.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const generateData = require( '../../../../../modules/ext.checkUser/checkuser/checkUserHelper/generateData.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.generateData', QUnit.newMwEnvironment() ); | ^ 6 | 7 | QUnit.test( 'Test that generateData returns the expected data', ( assert ) => { 8 | const cases = require( './cases/generateData.json' ); at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/generateData.test.js:5:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.truncatableTextField.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.truncatableTextField.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { TruncatableTextField } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.TruncatableTextField', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.truncatableTextField.test.js:18:34) FAIL extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.test.js' However, Jest was able to find: './mmv.model.Image.test.js' './mmv.model.License.test.js' './mmv.model.Repo.test.js' './mmv.model.TaskQueue.test.js' './mmv.model.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { Thumbnail, ThumbnailWidth } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.model', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/model/mmv.model.test.js:18:39) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/ve.ui.DiffElement.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.ui.DiffElement (MW)', ve.test.utils.newMwEnvironment() ); | ^ 8 | 9 | QUnit.test.each( 'Diffing', 10 | [ at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/ve.ui.DiffElement.test.js:7:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.description.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.description.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { Description } = require( 'mmv' ); | ^ 2 | 3 | QUnit.module( 'mmv.ui.description', QUnit.newMwEnvironment() ); 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.description.test.js:1:25) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineParameterSelectWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlineParameterSelectWidget' ); | ^ 2 | 3 | QUnit.test( 'static item constructor', ( assert ) => { 4 | const item = ve.ui.MWTransclusionOutlineParameterSelectWidget.static.createItem( { data: 'p1' } ); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineParameterSelectWidget.test.js:1:67) FAIL tests/qunit/resources/mediawiki.base/errorLogger.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.base/errorLogger', () => { | ^ 2 | 3 | QUnit.test( 'installGlobalHandler', function ( assert ) { 4 | const errorMessage = 'Foo'; at Object.<anonymous> (tests/qunit/resources/mediawiki.base/errorLogger.test.js:1:51) FAIL tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js ● instrumentation › addWprovToSearchResultUrls without offset ReferenceError: location is not defined 57 | return results.map( ( result, index ) => { 58 | if ( result.url ) { > 59 | const url = new URL( result.url, location.href ); | ^ 60 | url.searchParams.set( 'wprov', getWprovFromResultIndex( index + offset ) ); 61 | result = Object.assign( {}, result, { url: url.toString() } ); 62 | } at location (resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js:59:37) at Array.map (<anonymous>) at Object.map [as addWprovToSearchResultUrls] (resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js:57:17) at Object.addWprovToSearchResultUrls (tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js:40:27) ● instrumentation › addWprovToSearchResultUrls with offset ReferenceError: location is not defined 57 | return results.map( ( result, index ) => { 58 | if ( result.url ) { > 59 | const url = new URL( result.url, location.href ); | ^ 60 | url.searchParams.set( 'wprov', getWprovFromResultIndex( index + offset ) ); 61 | result = Object.assign( {}, result, { url: url.toString() } ); 62 | } at location (resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js:59:37) at Array.map (<anonymous>) at Object.map [as addWprovToSearchResultUrls] (resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js:57:17) at Object.addWprovToSearchResultUrls (tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js:79:27) FAIL tests/jest/mediawiki.special.block/NamespacesField.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/NamespacesField.test.js:5:29) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.watch.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.watch', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.watch.test.js:1:51) FAIL skins/Vector/tests/jest/instrumentation.test.js ● instrumentation › addWprovToSearchResultUrls without offset ReferenceError: location is not defined 63 | return results.map( ( result, index ) => { 64 | if ( result.url ) { > 65 | const url = new URL( result.url, location.href ); | ^ 66 | url.searchParams.set( 'wprov', getWprovFromResultIndex( index + offset ) ); 67 | result = Object.assign( {}, result, { url: url.toString() } ); 68 | } at location (skins/Vector/resources/skins.vector.search/instrumentation.js:65:37) at Array.map (<anonymous>) at Object.map [as addWprovToSearchResultUrls] (skins/Vector/resources/skins.vector.search/instrumentation.js:63:17) at Object.addWprovToSearchResultUrls (skins/Vector/tests/jest/instrumentation.test.js:40:27) ● instrumentation › addWprovToSearchResultUrls with offset ReferenceError: location is not defined 63 | return results.map( ( result, index ) => { 64 | if ( result.url ) { > 65 | const url = new URL( result.url, location.href ); | ^ 66 | url.searchParams.set( 'wprov', getWprovFromResultIndex( index + offset ) ); 67 | result = Object.assign( {}, result, { url: url.toString() } ); 68 | } at location (skins/Vector/resources/skins.vector.search/instrumentation.js:65:37) at Array.map (<anonymous>) at Object.map [as addWprovToSearchResultUrls] (skins/Vector/resources/skins.vector.search/instrumentation.js:63:17) at Object.addWprovToSearchResultUrls (skins/Vector/tests/jest/instrumentation.test.js:79:27) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.share.test.js ● Test suite failed to run Cannot find module 'mmv.ui.reuse' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.share.test.js' 16 | */ 17 | > 18 | const { Share } = require( 'mmv.ui.reuse' ); | ^ 19 | 20 | function makeShare() { 21 | return new Share( $( '#qunit-fixture' ) ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.reuse.share.test.js:18:19) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingStep.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingStep.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | 'use strict'; 2 | > 3 | const TempAccountsOnboardingStep = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingStep.vue' ), | ^ 4 | utils = require( '@vue/test-utils' ); 5 | 6 | const renderComponent = ( props, slots ) => utils.mount( TempAccountsOnboardingStep, { at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/tempAccountsOnboardingStep.test.js:3:36) FAIL tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js ● Test suite failed to run Cannot find module 'mediawiki.rcfilters.filters.ui' from 'tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js' 1 | /* eslint-disable camelcase */ 2 | ( function () { > 3 | const rcfilters = require( 'mediawiki.rcfilters.filters.ui' ); | ^ 4 | const itemData = { 5 | params: { 6 | param1: '1', at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js:3:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js:93:2) FAIL extensions/CheckUser/tests/jest/components/IPAutoRevealOnDialog.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccounts/components/IPAutoRevealOnDialog.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 19 | ] ), { virtual: true } ); 20 | > 21 | const IPAutoRevealOnDialog = require( '../../../modules/ext.checkUser.tempAccounts/components/IPAutoRevealOnDialog.vue' ); | ^ 22 | const utils = require( '@vue/test-utils' ); 23 | const { CdxDialog, CdxSelect } = require( '@wikimedia/codex' ); 24 | at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/IPAutoRevealOnDialog.test.js:21:30) FAIL skins/Vector/tests/jest/skins.vector.js/menuTabs.test.js ● menuTabs › adds vector-tab-noicon class to li element when part of tabs ReferenceError: mw is not defined 5 | /** @type {Function} */ 6 | let callback; > 7 | jest.spyOn( mw, 'hook' ).mockImplementation( () => ( { | ^ 8 | add: function ( fn ) { 9 | callback = fn; 10 | at Object.mw (skins/Vector/tests/jest/skins.vector.js/menuTabs.test.js:7:15) ● menuTabs › does not add vector-tab-noicon class to li element when not part of tabs ReferenceError: mw is not defined 5 | /** @type {Function} */ 6 | let callback; > 7 | jest.spyOn( mw, 'hook' ).mockImplementation( () => ( { | ^ 8 | add: function ( fn ) { 9 | callback = fn; 10 | at Object.mw (skins/Vector/tests/jest/skins.vector.js/menuTabs.test.js:7:15) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIntroStep.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIntroStep.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | 'use strict'; 2 | > 3 | const TempAccountsOnboardingIntroStep = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIntroStep.vue' ), | ^ 4 | utils = require( '@vue/test-utils' ); 5 | 6 | describe( 'First step of temporary accounts onboarding dialog', () => { at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIntroStep.test.js:3:41) FAIL extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIPRevealStep.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/extensions/CheckUser/modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIPRevealStep.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | 'use strict'; 2 | > 3 | const TempAccountsOnboardingIPRevealStep = require( '../../../modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingIPRevealStep.vue' ), | ^ 4 | utils = require( '@vue/test-utils' ); 5 | 6 | describe( 'First step of temporary accounts onboarding dialog', () => { at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (extensions/CheckUser/tests/jest/components/tempAccountsOnboardingIPRevealStep.test.js:3:44) FAIL tests/qunit/resources/mediawiki.toc.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | ( function () { > 2 | QUnit.module( 'mediawiki.toc', { | ^ 3 | beforeEach: function () { 4 | this.getCookie = this.stub( mw.cookie, 'get' ).returns( null ); 5 | this.setCookie = this.stub( mw.cookie, 'set' ).returns( null ); at QUnit (tests/qunit/resources/mediawiki.toc.test.js:2:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.toc.test.js:42:2) FAIL vendor/wikimedia/parsoid/bin/normalize.test.js ● Test suite failed to run Cannot find module './lib/utils/promise.js' from 'vendor/wikimedia/parsoid/core-upgrade.js' Require stack: vendor/wikimedia/parsoid/core-upgrade.js vendor/wikimedia/parsoid/bin/normalize.test.js 2 | 3 | // Register prfun's Promises with node-pn > 4 | var Promise = require('./lib/utils/promise.js'); | ^ 5 | require('pn/_promise')(Promise); // This only needs to be done once. 6 | 7 | // Comments below annotate the highest lts version of node for which the at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (vendor/wikimedia/parsoid/core-upgrade.js:4:15) at Object.require (vendor/wikimedia/parsoid/bin/normalize.test.js:5:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineParameterWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlineParameterWidget' ); | ^ 2 | 3 | QUnit.test( 'interprets param with no attributes', ( assert ) => { 4 | const widget = new ve.ui.MWTransclusionOutlineParameterWidget( {} ); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineParameterWidget.test.js:1:61) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.DiffElement.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 7 | */ 8 | > 9 | QUnit.module( 've.ui.DiffElement (Cite)' ); | ^ 10 | 11 | QUnit.test( 'Diffing', ( assert ) => { 12 | const spacer = '<div class="ve-ui-diffElement-spacer">⋮</div>', at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.DiffElement.test.js:9:1) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/watchstar.test.js ● Test suite failed to run Cannot find module 'skins.minerva.scripts/watchstar.js' from 'skins/MinervaNeue/tests/qunit/skins.minerva.scripts/watchstar.test.js' 1 | /* eslint-disable no-jquery/no-class-state */ 2 | ( function () { > 3 | const watchstar = require( 'skins.minerva.scripts/watchstar.js' ); | ^ 4 | const toggleClasses = watchstar.test.toggleClasses; 5 | const WATCHED_CLASS = watchstar.test.WATCHED_ICON_CLASS; 6 | const TEMP_WATCHED_CLASS = watchstar.test.TEMP_WATCHED_ICON_CLASS; at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/watchstar.test.js:3:20) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/watchstar.test.js:40:2) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferencesListNode.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.dm.MWReferencesListNode (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'isEditable', ( assert ) => { 6 | let model = new ve.dm.MWReferencesListNode(); at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferencesListNode.test.js:3:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.ContentBranchNode.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.ce.ContentBranchNode (MW)' ); | ^ 9 | 10 | /* Tests */ 11 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.ContentBranchNode.test.js:8:1) FAIL extensions/MultimediaViewer/tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js' However, Jest was able to find: './mmv.logging.ViewLogger.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { ViewLogger } = require( 'mmv' ); | ^ 2 | 3 | QUnit.module( 'mmv.logging.ViewLogger', QUnit.newMwEnvironment( { 4 | beforeEach: function () { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js:1:24) FAIL tests/qunit/resources/mediawiki.template.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | ( function () { 2 | > 3 | QUnit.module( 'mediawiki.template', { | ^ 4 | beforeEach: function () { 5 | const abcCompiler = { 6 | compile: function () { at QUnit (tests/qunit/resources/mediawiki.template.test.js:3:2) at Object.<anonymous> (tests/qunit/resources/mediawiki.template.test.js:63:2) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferenceNode.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.dm.MWReferenceNode (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'getGroup', ( assert ) => { 6 | const dataElement = { attributes: { refGroup: 'g' } }; at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWReferenceNode.test.js:3:1) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/AB.test.js ● Test suite failed to run Cannot find module 'skins.minerva.scripts/AB.js' from 'skins/MinervaNeue/tests/qunit/skins.minerva.scripts/AB.test.js' 1 | ( function () { 2 | > 3 | const AB = require( 'skins.minerva.scripts/AB.js' ); | ^ 4 | const defaultConfig = { 5 | testName: 'WME.MinervaABTest', 6 | samplingRate: 0.5, at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/AB.test.js:3:13) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/AB.test.js:52:2) FAIL tests/jest/mediawiki.special.block/ReasonField.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/components/ReasonField.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 2 | 3 | const { mount, shallowMount } = require( '@vue/test-utils' ); > 4 | const ReasonField = require( '../../../resources/src/mediawiki.special.block/components/ReasonField.vue' ); | ^ 5 | const { mockMwConfigGet } = require( './SpecialBlock.setup.js' ); 6 | 7 | describe( 'ReasonField', () => { at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/ReasonField.test.js:4:21) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.parse.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.edit', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.parse.test.js:1:50) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.messages.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.messages', ( hooks ) => { | ^ 2 | let server; 3 | hooks.beforeEach( function () { 4 | server = this.sandbox.useFakeServer(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.messages.test.js:1:54) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/createTable.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const createTable = require( '../../../../../modules/ext.checkUser/checkuser/checkUserHelper/createTable.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.createTable', QUnit.newMwEnvironment( { | ^ 6 | beforeEach: function () { 7 | mw.config.set( { 8 | wgArticlePath: '/index.php?title=$1' at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/createTable.test.js:5:1) FAIL tests/jest/mediawiki.special.block/BlockDetailsField.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/BlockDetailsField.test.js:5:29) FAIL tests/jest/mediawiki.special.block/init.test.js ● SpecialBlock init.js › should give the form the ID mw-block-form The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 5 | 6 | beforeEach( () => { > 7 | document.body.innerHTML = ''; | ^ 8 | const form = document.createElement( 'form' ); 9 | form.className = 'mw-htmlform'; 10 | document.body.appendChild( form ); at Object.document (tests/jest/mediawiki.special.block/init.test.js:7:3) ● SpecialBlock init.js › should do nothing if there is no mw-htmlform The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 5 | 6 | beforeEach( () => { > 7 | document.body.innerHTML = ''; | ^ 8 | const form = document.createElement( 'form' ); 9 | form.className = 'mw-htmlform'; 10 | document.body.appendChild( form ); at Object.document (tests/jest/mediawiki.special.block/init.test.js:7:3) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/page-issues/index.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'Minerva pageIssues', () => { | ^ 2 | const mobile = require( 'mobile.startup' ); 3 | const pageIssues = require( 'skins.minerva.scripts/page-issues/index.js' ); 4 | const insertBannersOrNotice = pageIssues.test.insertBannersOrNotice; at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/page-issues/index.test.js:1:43) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.Converter.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 8 | */ 9 | > 10 | QUnit.module( 've.dm.Converter (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 11 | 12 | QUnit.test( 'getModelFromDom', ( assert ) => { 13 | const cases = ve.dm.citeExample.domToDataCases; at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.Converter.test.js:10:1) FAIL tests/qunit/resources/mediawiki.experiments.test.js ● Test suite failed to run ReferenceError: mw is not defined 1 | ( function () { 2 | > 3 | const getBucket = mw.experiments.getBucket; | ^ 4 | 5 | function createExperiment() { 6 | return { at mw (tests/qunit/resources/mediawiki.experiments.test.js:3:20) at Object.<anonymous> (tests/qunit/resources/mediawiki.experiments.test.js:63:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvasButtons.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvasButtons.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring 16 | */ 17 | > 18 | const { CanvasButtons } = require( 'mmv' ); | ^ 19 | 20 | QUnit.module( 'mmv.ui.CanvasButtons', QUnit.newMwEnvironment() ); 21 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.canvasButtons.test.js:18:27) FAIL tests/jest/mediawiki.skinning.typeaheadSearch/App.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.skinning.typeaheadSearch/App.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | const VueTestUtils = require( '@vue/test-utils' ); > 2 | const App = require( '../../../resources/src/mediawiki.skinning.typeaheadSearch/App.vue' ); | ^ 3 | const urlGeneratorFn = require( '../../../resources/src/mediawiki.skinning.typeaheadSearch/urlGenerator.js' ); 4 | const scriptPath = '/w/index.php'; 5 | const urlGenerator = urlGeneratorFn( scriptPath ); at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.skinning.typeaheadSearch/App.test.js:2:13) FAIL skins/Vector/tests/integration-qunit/integration.test.js ● Test suite failed to run Cannot find module 'skins.vector.clientPreferences' from 'skins/Vector/tests/integration-qunit/integration.test.js' 1 | /* global QUnit */ > 2 | const clientPreferences = require( 'skins.vector.clientPreferences' ); | ^ 3 | 4 | /*! 5 | * Vector integration tests. at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (skins/Vector/tests/integration-qunit/integration.test.js:2:27) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlinePartWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlinePartWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor', ( assert ) => { 4 | const transclusion = new ve.dm.MWTransclusionModel(), at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlinePartWidget.test.js:1:56) FAIL extensions/CheckUser/tests/qunit/ext.checkUser.clientHints/index.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 'ext.checkUser.clientHints', QUnit.newMwEnvironment( {} ) ); | ^ 4 | 5 | QUnit.test( 'Client hints code is setup if navigator.userAgentData.getHighEntropyValues() is available', function ( assert ) { 6 | const clientHints = require( '../../../modules/ext.checkUser.clientHints/index.js' ); at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser.clientHints/index.test.js:3:1) FAIL skins/Vector/tests/jest/App.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/skins/Vector/resources/skins.vector.search/App.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 1 | const VueTestUtils = require( '@vue/test-utils' ); > 2 | const App = require( '../../resources/skins.vector.search/App.vue' ); | ^ 3 | const urlGeneratorFn = require( '../../resources/skins.vector.search/urlGenerator.js' ); 4 | const scriptPath = '/w/index.php'; 5 | const urlGenerator = urlGeneratorFn( scriptPath ); at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (skins/Vector/tests/jest/App.test.js:2:13) FAIL extensions/DiscussionTools/tests/qunit/utils.test.js ● Test suite failed to run Cannot find module 'ext.discussionTools.init' from 'extensions/DiscussionTools/tests/qunit/utils.test.js' > 1 | const utils = require( 'ext.discussionTools.init' ).utils; | ^ 2 | 3 | QUnit.module( 'mw.dt.utils', QUnit.newMwEnvironment() ); 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (extensions/DiscussionTools/tests/qunit/utils.test.js:1:58) FAIL tests/jest/mediawiki.special.block/AdditionalDetailsField.test.js ● Test suite failed to run Jest encountered an unexpected token Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax. Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration. By default "node_modules" folder is ignored by transformers. Here's what you can do: • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it. • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option. You'll find more details and examples of these config options in the docs: https://jestjs.io/docs/configuration For information about custom transformations, see: https://jestjs.io/docs/code-transformation Details: /src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<template> ^ SyntaxError: Unexpected token '<' 4 | const { createTestingPinia } = require( '@pinia/testing' ); 5 | > 6 | const SpecialBlock = require( '../../../resources/src/mediawiki.special.block/SpecialBlock.vue' ); | ^ 7 | 8 | /** 9 | * Mount the SpecialBlock component with the default configuration, at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14) at Object.require (tests/jest/mediawiki.special.block/SpecialBlock.setup.js:6:22) at Object.require (tests/jest/mediawiki.special.block/AdditionalDetailsField.test.js:5:29) FAIL extensions/DiscussionTools/tests/qunit/ThreadItem.test.js ● Test suite failed to run Cannot find module 'ext.discussionTools.init' from 'extensions/DiscussionTools/tests/qunit/ThreadItem.test.js' 1 | const > 2 | CommentItem = require( 'ext.discussionTools.init' ).CommentItem, | ^ 3 | HeadingItem = require( 'ext.discussionTools.init' ).HeadingItem; 4 | 5 | QUnit.module( 'mw.dt.ThreadItem', QUnit.newMwEnvironment() ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (extensions/DiscussionTools/tests/qunit/ThreadItem.test.js:2:65) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWParameterCheckboxInputWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWParameterCheckboxInputWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor passes config to parent', ( assert ) => { 4 | const widget = new ve.ui.MWParameterCheckboxInputWidget( { selected: true } ); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWParameterCheckboxInputWidget.test.js:1:55) FAIL extensions/Cite/tests/qunit/ve-cite/ve.dm.MWDocumentReferences.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.dm.MWDocumentReferences (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'first simple test', ( assert ) => { 6 | const doc = ve.dm.citeExample.createExampleDocument( 'references' ); at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.dm.MWDocumentReferences.test.js:3:1) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/UriUtil.test.js ● Test suite failed to run Cannot find module 'skins.minerva.scripts/UriUtil.js' from 'skins/MinervaNeue/tests/qunit/skins.minerva.scripts/UriUtil.test.js' 1 | ( function () { > 2 | const UriUtil = require( 'skins.minerva.scripts/UriUtil.js' ); | ^ 3 | 4 | QUnit.module( 'Minerva UriUtil', { 5 | beforeEach: function () { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at require (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/UriUtil.test.js:2:18) at Object.<anonymous> (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/UriUtil.test.js:39:2) FAIL tests/qunit/resources/mediawiki.widgets/NamespaceInput/mediawiki.widgets.NamespaceInputWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | */ 4 | > 5 | QUnit.module( 'mediawiki.widgets.NamespaceInputWidget' ); | ^ 6 | 7 | ( function () { 8 | const widgetA = new mw.widgets.NamespaceInputWidget( {} ); at Object.QUnit (tests/qunit/resources/mediawiki.widgets/NamespaceInput/mediawiki.widgets.NamespaceInputWidget.test.js:5:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlinePlaceholderWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlinePlaceholderWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor', ( assert ) => { 4 | const transclusion = new ve.dm.MWTransclusionModel(), at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlinePlaceholderWidget.test.js:1:63) FAIL tests/qunit/resources/startup/jscompat.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | // JavaScript compatibility tests to confirm that server and browser 2 | // are behaving consistently and configured correctly. > 3 | QUnit.module( 'startup/jscompat', () => { | ^ 4 | 5 | QUnit.test( 'Unicode variable name', ( assert ) => { 6 | const ŝablono = true; at Object.QUnit (tests/qunit/resources/startup/jscompat.test.js:3:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.UrlStringTransferHandler.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.ui.UrlStringTransferHandler (MW)' ); | ^ 8 | 9 | /* Tests */ 10 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.UrlStringTransferHandler.test.js:7:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.Converter.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 6 | */ 7 | > 8 | QUnit.module( 've.dm.Converter (MW)', ve.test.utils.newMwEnvironment() ); | ^ 9 | 10 | QUnit.test( 'getModelFromDom', ( assert ) => { 11 | const cases = ve.dm.mwExample.domToDataCases; at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/ve.dm.Converter.test.js:8:1) FAIL skins/Vector/tests/jest/skins.vector.es6/features.test.js ● features › toggle The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 3 | describe( 'features', () => { 4 | beforeEach( () => { > 5 | document.documentElement.setAttribute( 'class', 'vector-feature-foo-disabled vector-feature-bar-enabled hello' ); | ^ 6 | } ); 7 | 8 | test( 'toggle', () => { at Object.document (skins/Vector/tests/jest/skins.vector.es6/features.test.js:5:3) ● features › toggle unknown feature The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: document is not defined 3 | describe( 'features', () => { 4 | beforeEach( () => { > 5 | document.documentElement.setAttribute( 'class', 'vector-feature-foo-disabled vector-feature-bar-enabled hello' ); | ^ 6 | } ); 7 | 8 | test( 'toggle', () => { at Object.document (skins/Vector/tests/jest/skins.vector.es6/features.test.js:5:3) FAIL extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.Document.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | */ 6 | > 7 | QUnit.module( 've.ce.Document (MW)' ); | ^ 8 | 9 | /* Tests */ 10 | at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/ce/ve.ce.Document.test.js:7:1) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWUseExistingReferenceCommand.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.ui.MWUseExistingReferenceCommand (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | function getFragmentMock( hasRefs ) { 6 | const docRefsMock = { at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWUseExistingReferenceCommand.test.js:3:1) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/createTableText.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const createTableText = require( '../../../../../modules/ext.checkUser/checkuser/checkUserHelper/createTableText.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.createTableText' ); | ^ 6 | 7 | QUnit.test( 'Test that createTableText returns the expected wikitext', ( assert ) => { 8 | const cases = require( './cases/createTableText.json' ); at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/createTableText.test.js:5:1) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceGroupInputWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.ui.MWReferenceGroupInputWidget (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'Constructor', ( assert ) => { 6 | const widget = new ve.ui.MWReferenceGroupInputWidget( { at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceGroupInputWidget.test.js:3:1) FAIL tests/qunit/resources/mediawiki.template.mustache.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.template.mustache', ( hooks ) => { | ^ 2 | 3 | hooks.beforeEach( function () { 4 | // Stub register some templates at Object.<anonymous> (tests/qunit/resources/mediawiki.template.mustache.test.js:1:59) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/utils.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const Utils = require( '../../../../../modules/ext.checkUser/checkuser/checkUserHelper/utils.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.utils' ); | ^ 6 | 7 | QUnit.test( 'Test that calculateIPNumber returns the expected value', ( assert ) => { 8 | const cases = require( './cases/calculateIPNumber.json' ); at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/utils.test.js:5:1) FAIL tests/qunit/resources/mediawiki.messagePoster/factory.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.messagePoster', ( hooks ) => { | ^ 2 | const TEST_MODEL = 'test-content-model'; 3 | 4 | hooks.afterEach( () => { at Object.<anonymous> (tests/qunit/resources/mediawiki.messagePoster/factory.test.js:1:55) FAIL skins/Vector/tests/jest/deferUntilFrame.test.js ● deferUntilFrame.js › does not fire rAF if `0` is passed The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 5 | 6 | beforeEach( () => { > 7 | spy = jest.spyOn( window, 'requestAnimationFrame' ).mockImplementation( ( cb ) => { | ^ 8 | setTimeout( () => { 9 | cb( 1 ); 10 | } ); at Object.window (skins/Vector/tests/jest/deferUntilFrame.test.js:7:21) ● deferUntilFrame.js › does not fire rAF if `0` is passed TypeError: Cannot read properties of undefined (reading 'mockRestore') 15 | 16 | afterEach( () => { > 17 | spy.mockRestore(); | ^ 18 | } ); 19 | 20 | it( 'does not fire rAF if `0` is passed', ( done ) => { at Object.mockRestore (skins/Vector/tests/jest/deferUntilFrame.test.js:17:7) ● deferUntilFrame.js › fires rAF the specified number of times The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. Consider using the "jsdom" test environment. ReferenceError: window is not defined 5 | 6 | beforeEach( () => { > 7 | spy = jest.spyOn( window, 'requestAnimationFrame' ).mockImplementation( ( cb ) => { | ^ 8 | setTimeout( () => { 9 | cb( 1 ); 10 | } ); at Object.window (skins/Vector/tests/jest/deferUntilFrame.test.js:7:21) ● deferUntilFrame.js › fires rAF the specified number of times TypeError: Cannot read properties of undefined (reading 'mockRestore') 15 | 16 | afterEach( () => { > 17 | spy.mockRestore(); | ^ 18 | } ); 19 | 20 | it( 'does not fire rAF if `0` is passed', ( done ) => { at Object.mockRestore (skins/Vector/tests/jest/deferUntilFrame.test.js:17:7) FAIL skins/MinervaNeue/tests/qunit/skins.minerva.scripts/integration.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 5 | * For unit tests please see tests/jest. 6 | */ > 7 | QUnit.module( 'Minerva (integration)', () => { | ^ 8 | QUnit.test( '[T356653] Client preferences: Check assumptions about the cookie it writes to', function ( assert ) { 9 | mw.cookie.set( 'mwclientpreferences', '' ); 10 | this.sandbox.stub( mw.user, 'isAnon' ).returns( true ); at Object.QUnit (skins/MinervaNeue/tests/qunit/skins.minerva.scripts/integration.test.js:7:1) FAIL extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/buildUserElement.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 3 | const buildUserElement = require( '../../../../../modules/ext.checkUser/checkuser/checkUserHelper/buildUserElement.js' ); 4 | > 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.buildUserElement', QUnit.newMwEnvironment( { | ^ 6 | beforeEach: function () { 7 | mw.config.set( { 8 | wgArticlePath: '/wiki/$1' at Object.QUnit (extensions/CheckUser/tests/qunit/ext.checkUser/checkuser/checkUserHelper/buildUserElement.test.js:5:1) FAIL extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineButtonWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.ui.MWTransclusionOutlineButtonWidget' ); | ^ 2 | 3 | QUnit.test( 'Constructor', ( assert ) => { 4 | const widget = new ve.ui.MWTransclusionOutlineButtonWidget( {} ); at Object.<anonymous> (extensions/VisualEditor/modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineButtonWidget.test.js:1:58) FAIL extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionContentModel.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | { > 2 | QUnit.module( 've.dm.MWTransclusionContentModel' ); | ^ 3 | 4 | /** 5 | * @return {ve.dm.MWTransclusionModel} but it's a mock at Object.QUnit (extensions/VisualEditor/modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionContentModel.test.js:2:2) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceContextItem.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.ui.MWReferenceContextItem (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'getReferenceNode', ( assert ) => { 6 | // XXX: This is a regression test with a fragile setup. Please feel free to delete this test at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceContextItem.test.js:3:1) FAIL tests/qunit/resources/mediawiki.inspect.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.inspect', () => { | ^ 2 | 3 | QUnit.test( '.getModuleSize() - scripts', ( assert ) => { 4 | // Use eval so that the size doesn't change depending on minification at Object.<anonymous> (tests/qunit/resources/mediawiki.inspect.test.js:1:42) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceResultWidget.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 2 | 3 | ( function () { > 4 | QUnit.module( 've.ui.MWReferenceResultWidget (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 5 | 6 | function getConfigMock() { 7 | return { at QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceResultWidget.test.js:4:2) at Object.<anonymous> (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferenceResultWidget.test.js:22:2) FAIL extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.test.js ● Test suite failed to run Cannot find module 'mmv' from 'extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.test.js' However, Jest was able to find: './mmv.ui.canvas.test.js' './mmv.ui.canvasButtons.test.js' './mmv.ui.description.test.js' './mmv.ui.download.pane.test.js' './mmv.ui.metadataPanel.test.js' './mmv.ui.metadataPanelScroller.test.js' './mmv.ui.permission.test.js' './mmv.ui.progressBar.test.js' './mmv.ui.reuse.dialog.test.js' './mmv.ui.reuse.embed.test.js' './mmv.ui.reuse.share.test.js' './mmv.ui.reuse.utils.test.js' './mmv.ui.stripeButtons.test.js' './mmv.ui.test.js' './mmv.ui.truncatableTextField.test.js' You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx', 'json', 'node']. See https://jestjs.io/docs/configuration#modulefileextensions-arraystring > 1 | const { UiElement } = require( 'mmv' ); | ^ 2 | 3 | QUnit.module( 'mmv.ui', QUnit.newMwEnvironment( { 4 | beforeEach: function () { at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/ui/mmv.ui.test.js:1:23) FAIL extensions/Math/modules/ve-math/tests/ve.dm.Autocomplete.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 've.dm.Autocomplete (Math)', ve.test.utils.newMwEnvironment() ); | ^ 2 | 3 | QUnit.test( 'Autocomplete list', ( assert ) => { 4 | assert.notStrictEqual( at Object.<anonymous> (extensions/Math/modules/ve-math/tests/ve.dm.Autocomplete.test.js:1:78) FAIL extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboximage.test.js ● Test suite failed to run Cannot find module 'mmv.bootstrap' from 'extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboximage.test.js' > 1 | const { LightboxImage } = require( 'mmv.bootstrap' ); | ^ 2 | 3 | QUnit.module( 'mmv.lightboximage', QUnit.newMwEnvironment() ); 4 | at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.require (extensions/MultimediaViewer/tests/qunit/mmv/mmv.lightboximage.test.js:1:27) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWCitationDialogTool.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.ui.MWCitationDialogTool (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'isCompatibleWith', ( assert ) => { 6 | const model = new ve.dm.MWReferenceNode(); at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWCitationDialogTool.test.js:3:1) FAIL tests/qunit/resources/mediawiki.api/mediawiki.api.upload.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.api.upload', () => { | ^ 2 | 3 | QUnit.test( 'Basic functionality', ( assert ) => { 4 | const api = new mw.Api(); at Object.<anonymous> (tests/qunit/resources/mediawiki.api/mediawiki.api.upload.test.js:1:45) FAIL extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferencesListDialog.test.js ● Test suite failed to run ReferenceError: QUnit is not defined 1 | 'use strict'; 2 | > 3 | QUnit.module( 've.ui.MWReferencesListDialog (Cite)', ve.test.utils.newMwEnvironment() ); | ^ 4 | 5 | QUnit.test( 'isModified', ( assert ) => { 6 | const dialog = new ve.ui.MWReferencesListDialog(); at Object.QUnit (extensions/Cite/tests/qunit/ve-cite/ve.ui.MWReferencesListDialog.test.js:3:1) FAIL tests/qunit/resources/mediawiki.router.test.js ● Test suite failed to run ReferenceError: QUnit is not defined > 1 | QUnit.module( 'mediawiki.router', () => { | ^ 2 | const router = require( 'mediawiki.router' ); 3 | 4 | QUnit.test( 'instance', ( assert ) => { at Object.<anonymous> (tests/qunit/resources/mediawiki.router.test.js:1:41) FAIL skins/Vector/tests/jest/userLinks.test.js ● Test suite failed to run Cannot find module 'mustache' from 'skins/Vector/tests/jest/userLinksData.js' Require stack: skins/Vector/tests/jest/userLinksData.js skins/Vector/tests/jest/userLinks.test.js > 1 | const mustache = require( 'mustache' ); | ^ 2 | const fs = require( 'fs' ); 3 | const menuContents = fs.readFileSync( 'includes/templates/MenuContents.mustache', 'utf8' ); 4 | const userLinksTemplate = fs.readFileSync( 'includes/templates/UserLinks.mustache', 'utf8' ); at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (skins/Vector/tests/jest/userLinksData.js:1:39) at Object.require (skins/Vector/tests/jest/userLinks.test.js:1:27) FAIL tests/qunit/resources/jquery.tablesorter.parsers.test.js ● Test suite failed to run Your test suite must contain at least one test. at onResult (node_modules/@jest/core/build/TestScheduler.js:133:18) at node_modules/@jest/core/build/TestScheduler.js:254:19 at node_modules/emittery/index.js:363:13 at Array.map (<anonymous>) at Emittery.emit (node_modules/emittery/index.js:361:23) Test Suites: 229 failed, 2 passed, 231 total Tests: 67 failed, 12 passed, 79 total Snapshots: 0 total Time: 8.966 s Ran all test suites. --- stdout --- --- end --- Traceback (most recent call last): File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 324, in npm_test self.check_call(["npm", "test"]) ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^ File "/venv/lib/python3.13/site-packages/runner/shell2.py", line 63, in check_call res.check_returncode() ~~~~~~~~~~~~~~~~~~~~^^ File "/usr/lib/python3.13/subprocess.py", line 508, in check_returncode raise CalledProcessError(self.returncode, self.args, self.stdout, self.stderr) subprocess.CalledProcessError: Command '['/usr/bin/npm', 'test']' returned non-zero exit status 1. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 2030, in main libup.run(args.repo, args.output, args.branch) ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 1972, in run self.npm_audit_fix(new_npm_audit) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 274, in npm_audit_fix self.npm_test() ~~~~~~~~~~~~~^^ File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 329, in npm_test self.check_call(["node_modules/.bin/jest", "-u"]) ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/venv/lib/python3.13/site-packages/runner/shell2.py", line 63, in check_call res.check_returncode() ~~~~~~~~~~~~~~~~~~~~^^ File "/usr/lib/python3.13/subprocess.py", line 508, in check_returncode raise CalledProcessError(self.returncode, self.args, self.stdout, self.stderr) subprocess.CalledProcessError: Command '['node_modules/.bin/jest', '-u']' returned non-zero exit status 1.