Skip to content

Commit 0d5ccf3

Browse files
test: switch unit tests to ESM imports
1 parent ed5b69a commit 0d5ccf3

2 files changed

Lines changed: 110 additions & 34 deletions

File tree

tests/unit/classes/module_spec.js

Lines changed: 58 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,64 @@
11
const path = require("node:path");
2-
const { JSDOM } = require("jsdom");
2+
const { pathToFileURL } = require("node:url");
33

44
describe("File js/module (cloneObject)", () => {
55
describe("Test function cloneObject", () => {
66
let clone;
77
let Module;
8-
let dom;
9-
10-
beforeAll(() => {
11-
return new Promise((done) => {
12-
dom = new JSDOM(
13-
`<script>var Log = {log: () => {}, info: () => {}, warn: () => {}, error: () => {}, debug: () => {}};</script>\
14-
<script src="file://${path.join(__dirname, "..", "..", "..", "js", "module.js")}">`,
15-
{ runScripts: "dangerously", resources: "usable" }
16-
);
17-
dom.window.onload = () => {
18-
const { cloneObject, Module: LoadedModule } = dom.window;
19-
clone = cloneObject;
20-
Module = LoadedModule;
21-
done();
22-
};
23-
});
8+
let originalWindow;
9+
let originalLog;
10+
let originalConfig;
11+
let originalMM;
12+
let originalTranslator;
13+
let originalNunjucks;
14+
15+
beforeAll(async () => {
16+
originalWindow = global.window;
17+
originalLog = global.Log;
18+
originalConfig = global.config;
19+
originalMM = global.MM;
20+
originalTranslator = global.Translator;
21+
originalNunjucks = global.nunjucks;
22+
23+
global.window = { mmVersion: "2.0.0" };
24+
global.Log = { log: () => {}, info: () => {}, warn: () => {}, error: () => {}, debug: () => {} };
25+
global.config = { language: "en" };
26+
global.MM = {
27+
hideModule: () => {},
28+
showModule: () => {},
29+
sendNotification: () => {},
30+
updateDom: () => {}
31+
};
32+
global.Translator = {
33+
load: () => Promise.resolve(),
34+
translate: () => ""
35+
};
36+
global.nunjucks = {
37+
Environment () {
38+
this.addFilter = () => {};
39+
this.renderString = () => "";
40+
this.render = (_template, _data, callback) => callback(null, "");
41+
},
42+
WebLoader () {},
43+
runtime: {
44+
markSafe: (str) => str
45+
}
46+
};
47+
48+
const modulePath = pathToFileURL(path.join(__dirname, "..", "..", "..", "js", "module.js")).href;
49+
const loaded = await import(`${modulePath}?test=${Date.now()}`);
50+
51+
clone = loaded.cloneObject;
52+
Module = loaded.Module;
53+
});
54+
55+
afterAll(() => {
56+
global.window = originalWindow;
57+
global.Log = originalLog;
58+
global.config = originalConfig;
59+
global.MM = originalMM;
60+
global.Translator = originalTranslator;
61+
global.nunjucks = originalNunjucks;
2462
});
2563

2664
it("should clone object", () => {
@@ -137,11 +175,11 @@ describe("File js/module (cloneObject)", () => {
137175
let info;
138176

139177
beforeEach(() => {
140-
info = dom.window.Log.info;
178+
info = global.Log.info;
141179
});
142180

143181
afterEach(() => {
144-
dom.window.Log.info = info;
182+
global.Log.info = info;
145183
Module.definitions = {};
146184
});
147185

@@ -181,7 +219,7 @@ describe("File js/module (cloneObject)", () => {
181219
const moduleName = "MMM-TestSuperCall";
182220
let loggedMessage;
183221

184-
dom.window.Log.info = (message) => {
222+
global.Log.info = (message) => {
185223
loggedMessage = message;
186224
};
187225

tests/unit/functions/cmp_versions_spec.js

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,60 @@
11
const path = require("node:path");
2-
const { JSDOM } = require("jsdom");
2+
const { pathToFileURL } = require("node:url");
33

44
describe("Test function cmpVersions in js/module.js", () => {
55
let cmp;
6+
let originalWindow;
7+
let originalLog;
8+
let originalConfig;
9+
let originalMM;
10+
let originalTranslator;
11+
let originalNunjucks;
612

7-
beforeAll(() => {
8-
return new Promise((done) => {
9-
const dom = new JSDOM(
10-
`<script>var Class = {extend: () => { return {}; }};</script>\
11-
<script src="file://${path.join(__dirname, "..", "..", "..", "js", "module.js")}">`,
12-
{ runScripts: "dangerously", resources: "usable" }
13-
);
14-
dom.window.onload = () => {
15-
const { cmpVersions } = dom.window;
16-
cmp = cmpVersions;
17-
done();
18-
};
19-
});
13+
beforeAll(async () => {
14+
originalWindow = global.window;
15+
originalLog = global.Log;
16+
originalConfig = global.config;
17+
originalMM = global.MM;
18+
originalTranslator = global.Translator;
19+
originalNunjucks = global.nunjucks;
20+
21+
global.window = { mmVersion: "2.0.0" };
22+
global.Log = { log: () => {}, info: () => {}, warn: () => {}, error: () => {}, debug: () => {} };
23+
global.config = { language: "en" };
24+
global.MM = {
25+
hideModule: () => {},
26+
showModule: () => {},
27+
sendNotification: () => {},
28+
updateDom: () => {}
29+
};
30+
global.Translator = {
31+
load: () => Promise.resolve(),
32+
translate: () => ""
33+
};
34+
global.nunjucks = {
35+
Environment () {
36+
this.addFilter = () => {};
37+
this.renderString = () => "";
38+
this.render = (_template, _data, callback) => callback(null, "");
39+
},
40+
WebLoader () {},
41+
runtime: {
42+
markSafe: (str) => str
43+
}
44+
};
45+
46+
const modulePath = pathToFileURL(path.join(__dirname, "..", "..", "..", "js", "module.js")).href;
47+
const loaded = await import(`${modulePath}?test=${Date.now()}`);
48+
cmp = loaded.cmpVersions;
49+
});
50+
51+
afterAll(() => {
52+
global.window = originalWindow;
53+
global.Log = originalLog;
54+
global.config = originalConfig;
55+
global.MM = originalMM;
56+
global.Translator = originalTranslator;
57+
global.nunjucks = originalNunjucks;
2058
});
2159

2260
it("should return -1 when comparing 2.1 to 2.2", () => {

0 commit comments

Comments
 (0)