js: Use jQuery as a module.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2021-03-10 20:43:45 -08:00
parent ac36d59728
commit ea9ca6b7d0
211 changed files with 426 additions and 128 deletions

View File

@@ -12,8 +12,7 @@ const stub_i18n = require("./i18n");
const namespace = require("./namespace");
const test = require("./test");
const {make_zblueslip} = require("./zblueslip");
global.$ = require("./zjquery");
const zjquery = require("./zjquery");
require("@babel/register")({
extensions: [".es6", ".es", ".jsx", ".js", ".mjs", ".ts"],
@@ -71,7 +70,7 @@ function short_tb(tb) {
}
function run_one_module(file) {
global.$.clear_all_elements();
zjquery.clear_all_elements();
console.info("running test " + path.basename(file, ".js"));
test.set_current_file_name(file);
require(file);

View File

@@ -12,12 +12,20 @@ let actual_load;
const module_mocks = new Map();
const used_module_mocks = new Set();
const jquery_path = require.resolve("jquery");
const real_jquery_path = require.resolve("../zjsunit/real_jquery.js");
function load(request, parent, isMain) {
const filename = Module._resolveFilename(request, parent, isMain);
if (module_mocks.has(filename)) {
used_module_mocks.add(filename);
return module_mocks.get(filename);
}
if (filename === jquery_path && parent.filename !== real_jquery_path) {
// jQuery exposes an incompatible API to Node vs. browser, so
// this wouldn't work.
throw new Error("This test will need jquery mocked using zjquery or real_jquery");
}
return actual_load(request, parent, isMain);
}

View File

@@ -0,0 +1,8 @@
"use strict";
const jquery = require("jquery");
// so the tests can mock jQuery
delete require.cache[require.resolve("jquery")];
module.exports = jquery;