zjsunit: Do not run $(...) automatically.

We have generally gone away from using $(...)
initialization in modules that we test with
zjsunit, but there are a few remaining special
cases related to our billing and portico
codebases.
This commit is contained in:
Steve Howell
2021-03-13 14:49:01 +00:00
committed by Steve Howell
parent bc8647539c
commit fbd3669461
8 changed files with 33 additions and 9 deletions

View File

@@ -22,6 +22,8 @@ const helpers = mock_esm("../../static/js/billing/helpers", {
set_tab: () => {}, set_tab: () => {},
}); });
zrequire("billing/billing");
run_test("initialize", (override) => { run_test("initialize", (override) => {
let token_func; let token_func;
@@ -69,7 +71,7 @@ run_test("initialize", (override) => {
$("#payment-method").data = (key) => $("#payment-method").data = (key) =>
document.querySelector("#payment-method").getAttribute("data-" + key); document.querySelector("#payment-method").getAttribute("data-" + key);
zrequire("billing/billing"); $.get_initialize_function()();
assert(set_tab_called); assert(set_tab_called);
assert(stripe_checkout_configure_called); assert(stripe_checkout_configure_called);

View File

@@ -16,7 +16,9 @@ const common = zrequire("common");
run_test("basics", () => { run_test("basics", () => {
common.autofocus("#home"); common.autofocus("#home");
$.get_initialize_function()();
assert($("#home").is_focused()); assert($("#home").is_focused());
$.clear_initialize_function();
}); });
run_test("phrase_match", () => { run_test("phrase_match", () => {

View File

@@ -8,7 +8,7 @@ const {run_test} = require("../zjsunit/test");
const $ = require("../zjsunit/zjquery"); const $ = require("../zjsunit/zjquery");
const noop = () => {}; const noop = () => {};
stub_templates(() => noop); stub_templates(() => "<stub>");
const page_params = set_global("page_params", {}); const page_params = set_global("page_params", {});
mock_cjs("jquery", $); mock_cjs("jquery", $);

View File

@@ -14,9 +14,10 @@ const dom = new JSDOM(template, {pretendToBeVisual: true});
const document = dom.window.document; const document = dom.window.document;
mock_cjs("jquery", $); mock_cjs("jquery", $);
zrequire("../js/analytics/support");
run_test("scrub_realm", () => { run_test("scrub_realm", () => {
zrequire("../js/analytics/support"); $.get_initialize_function()();
const click_handler = $("body").get_on_handler("click", ".scrub-realm-button"); const click_handler = $("body").get_on_handler("click", ".scrub-realm-button");
const fake_this = $.create("fake-.scrub-realm-button"); const fake_this = $.create("fake-.scrub-realm-button");

View File

@@ -28,6 +28,7 @@ set_global("page_params", {
mock_cjs("jquery", $); mock_cjs("jquery", $);
const helpers = zrequire("../js/billing/helpers"); const helpers = zrequire("../js/billing/helpers");
zrequire("../js/billing/upgrade");
run_test("initialize", (override) => { run_test("initialize", (override) => {
let token_func; let token_func;
@@ -103,7 +104,7 @@ run_test("initialize", (override) => {
$("#autopay-form").data = (key) => $("#autopay-form").data = (key) =>
document.querySelector("#autopay-form").getAttribute("data-" + key); document.querySelector("#autopay-form").getAttribute("data-" + key);
zrequire("../js/billing/upgrade"); $.get_initialize_function()();
const e = { const e = {
preventDefault: noop, preventDefault: noop,

View File

@@ -70,6 +70,7 @@ function short_tb(tb) {
} }
function run_one_module(file) { function run_one_module(file) {
zjquery.clear_initialize_function();
zjquery.clear_all_elements(); zjquery.clear_all_elements();
console.info("running test " + path.basename(file, ".js")); console.info("running test " + path.basename(file, ".js"));
test.set_current_file_name(file); test.set_current_file_name(file);

View File

@@ -486,13 +486,21 @@ function make_zjquery() {
return proxy; return proxy;
} }
let initialize_function;
const zjquery = function (arg, arg2) { const zjquery = function (arg, arg2) {
if (typeof arg === "function") { if (typeof arg === "function") {
// If somebody is passing us a function, we emulate if (initialize_function) {
// jQuery's behavior of running this function after throw new Error(`
// page load time. But there are no pages to load, We are trying to avoid the $(...) mechanism
// so we just call it right away. for initializing modules in our codebase,
arg(); and the code that you are compiling/running
has tried to do this twice. Please either
clean up the real code or reduce the scope
of what you are testing in this test module.
`);
}
initialize_function = arg;
return undefined; return undefined;
} }
@@ -533,6 +541,14 @@ function make_zjquery() {
return elems.get(selector); return elems.get(selector);
}; };
zjquery.get_initialize_function = function () {
return initialize_function;
};
zjquery.clear_initialize_function = function () {
initialize_function = undefined;
};
zjquery.create = function (name, opts) { zjquery.create = function (name, opts) {
assert(!elems.has(name), "You already created an object with this name!!"); assert(!elems.has(name), "You already created an object with this name!!");
const elem = new_elem(name, opts); const elem = new_elem(name, opts);

View File

@@ -7,6 +7,7 @@ if (module.hot) {
export const status_classes = "alert-error alert-success alert-info alert-warning"; export const status_classes = "alert-error alert-success alert-info alert-warning";
// TODO: Move this to the portico codebase.
export function autofocus(selector) { export function autofocus(selector) {
$(() => { $(() => {
$(selector).trigger("focus"); $(selector).trigger("focus");