mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-06-27 03:39:55 +00:00
Hi, Just because, i never try to code a test I purpose to supervise this work After, perhaps it is not necessary to integrate it in develop branch. It's up to you to decide
88 lines
2.1 KiB
JavaScript
88 lines
2.1 KiB
JavaScript
const jsdom = require("jsdom");
|
|
|
|
exports.startApplication = async (configFilename, exec) => {
|
|
jest.resetModules();
|
|
if (global.app) {
|
|
await this.stopApplication();
|
|
}
|
|
// Set config sample for use in test
|
|
if (configFilename === "") {
|
|
process.env.MM_CONFIG_FILE = "config/config.js";
|
|
} else {
|
|
process.env.MM_CONFIG_FILE = configFilename;
|
|
}
|
|
if (exec) exec;
|
|
global.app = require("../../../js/app");
|
|
|
|
return global.app.start();
|
|
};
|
|
|
|
exports.stopApplication = async () => {
|
|
if (!global.app) {
|
|
return Promise.resolve();
|
|
}
|
|
await global.app.stop();
|
|
delete global.app;
|
|
};
|
|
|
|
exports.getDocument = () => {
|
|
return new Promise((resolve) => {
|
|
const url = `http://${config.address || "localhost"}:${config.port || "8080"}`;
|
|
jsdom.JSDOM.fromURL(url, { resources: "usable", runScripts: "dangerously" }).then((dom) => {
|
|
dom.window.name = "jsdom";
|
|
global.window = dom.window;
|
|
dom.window.fetch = fetch;
|
|
dom.window.onload = () => {
|
|
global.document = dom.window.document;
|
|
resolve();
|
|
};
|
|
});
|
|
});
|
|
};
|
|
|
|
exports.waitForElement = (selector, ignoreValue = "") => {
|
|
return new Promise((resolve) => {
|
|
let oldVal = "dummy12345";
|
|
const interval = setInterval(() => {
|
|
const element = document.querySelector(selector);
|
|
if (element) {
|
|
let newVal = element.textContent;
|
|
if (newVal === oldVal) {
|
|
clearInterval(interval);
|
|
resolve(element);
|
|
} else {
|
|
if (ignoreValue === "") {
|
|
oldVal = newVal;
|
|
} else {
|
|
if (!newVal.includes(ignoreValue)) oldVal = newVal;
|
|
}
|
|
}
|
|
}
|
|
}, 100);
|
|
});
|
|
};
|
|
|
|
exports.waitForAllElements = (selector) => {
|
|
return new Promise((resolve) => {
|
|
let oldVal = 999999;
|
|
const interval = setInterval(() => {
|
|
const element = document.querySelectorAll(selector);
|
|
if (element) {
|
|
let newVal = element.length;
|
|
if (newVal === oldVal) {
|
|
clearInterval(interval);
|
|
resolve(element);
|
|
} else {
|
|
if (newVal !== 0) oldVal = newVal;
|
|
}
|
|
}
|
|
}, 100);
|
|
});
|
|
};
|
|
|
|
exports.testMatch = async (element, regex) => {
|
|
const elem = await this.waitForElement(element);
|
|
expect(elem).not.toBe(null);
|
|
expect(elem.textContent).toMatch(regex);
|
|
};
|