Make the e2e tests wait for the app to start and close before running next test (#2952)

When trying to debug why the tests broke for
https://github.com/MichMich/MagicMirror/pull/2946 I found that the tests
does not wait for the app to start and close. So if the startup isn't
blocking that would fail.

So I added a callback for `close()` too and converted them to promises
for the `startApplication()` and `stopApplication()` and updated all the
e2e tests to await both. Will try to refactor all these callbacks to
promises in a later PR.
This commit is contained in:
buxxi
2022-10-29 22:34:17 +02:00
committed by GitHub
parent 7058fc5fd8
commit f25abfd2f8
20 changed files with 189 additions and 168 deletions

View File

@@ -1,9 +1,10 @@
const jsdom = require("jsdom");
const corefetch = require("fetch");
exports.startApplication = (configFilename, exec) => {
exports.startApplication = async (configFilename, exec) => {
jest.resetModules();
this.stopApplication();
if (global.app) {
await this.stopApplication();
}
// Set config sample for use in test
if (configFilename === "") {
process.env.MM_CONFIG_FILE = "config/config.js";
@@ -12,14 +13,20 @@ exports.startApplication = (configFilename, exec) => {
}
if (exec) exec;
global.app = require("app.js");
global.app.start();
return new Promise((resolve) => {
global.app.start(resolve);
});
};
exports.stopApplication = async () => {
if (global.app) {
global.app.stop();
return new Promise((resolve) => {
global.app.stop(resolve);
delete global.app;
});
}
await new Promise((resolve) => setTimeout(resolve, 100));
return Promise.resolve();
};
exports.getDocument = () => {
@@ -75,13 +82,8 @@ exports.waitForAllElements = (selector) => {
});
};
exports.fetch = (url) => {
return new Promise((resolve) => {
corefetch(url).then((res) => {
resolve(res);
});
});
};
// When native fetch is used keep-alive is set which causes issues with tests that should not share the connection, fall back to use the older one for now...
exports.fetch = require("node-fetch");
exports.testMatch = async (element, regex) => {
const elem = await this.waitForElement(element);