diff --git a/CHANGELOG.md b/CHANGELOG.md index c781544a..1664db9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ planned for 2025-07-01 - [feat] Add rule `no-undef` in config file validation to fix #3785 (#3786) - [fonts] Fix `roboto.css` to avoid error message `Unknown descriptor 'var(' in @font-face rule.` in firefox console (#3787) - [tests] Fix and refactor e2e test `Same keys` in `translations_spec.js` (#3809) +- [tests] Fix e2e tests newsfeed and calendar to exit without open handles (#3817) ### Updated diff --git a/jest.config.js b/jest.config.js index fde44c96..0faea8b9 100644 --- a/jest.config.js +++ b/jest.config.js @@ -20,7 +20,6 @@ module.exports = async () => { }, { displayName: "e2e", - setupFilesAfterEnv: ["/tests/e2e/helpers/mock-console.js"], testMatch: ["**/tests/e2e/**/*.[jt]s?(x)"], modulePaths: ["/js/"], testPathIgnorePatterns: ["/tests/e2e/helpers", "/tests/e2e/mocks"] diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 2a56ff5b..92c65a1d 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -81,10 +81,13 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn * Schedule the timer for the next update. */ const scheduleTimer = function () { - clearTimeout(reloadTimer); - reloadTimer = setTimeout(function () { - fetchCalendar(); - }, reloadInterval); + if (process.env.JEST_WORKER_ID === undefined) { + // only set timer when not running in jest + clearTimeout(reloadTimer); + reloadTimer = setTimeout(function () { + fetchCalendar(); + }, reloadInterval); + } }; /* public methods */ diff --git a/modules/default/newsfeed/newsfeedfetcher.js b/modules/default/newsfeed/newsfeedfetcher.js index ea181b60..adad7442 100644 --- a/modules/default/newsfeed/newsfeedfetcher.js +++ b/modules/default/newsfeed/newsfeedfetcher.js @@ -128,10 +128,13 @@ const NewsfeedFetcher = function (url, reloadInterval, encoding, logFeedWarnings * Schedule the timer for the next update. */ const scheduleTimer = function () { - clearTimeout(reloadTimer); - reloadTimer = setTimeout(function () { - fetchNews(); - }, reloadIntervalMS); + if (process.env.JEST_WORKER_ID === undefined) { + // only set timer when not running in jest + clearTimeout(reloadTimer); + reloadTimer = setTimeout(function () { + fetchNews(); + }, reloadIntervalMS); + } }; /* public methods */ diff --git a/tests/configs/default.js b/tests/configs/default.js index ba665206..71d320cd 100644 --- a/tests/configs/default.js +++ b/tests/configs/default.js @@ -1,16 +1,19 @@ -exports.configFactory = (options) => { - return Object.assign( - { - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, +if (typeof exports === "object") { + // running in nodejs (not in browser) + exports.configFactory = (options) => { + return Object.assign( + { + electronOptions: { + webPreferences: { + nodeIntegration: true, + enableRemoteModule: true, + contextIsolation: false + } + }, - modules: [] - }, - options - ); -}; + modules: [] + }, + options + ); + }; +} diff --git a/tests/e2e/helpers/global-setup.js b/tests/e2e/helpers/global-setup.js index 871912f7..57d31aa8 100644 --- a/tests/e2e/helpers/global-setup.js +++ b/tests/e2e/helpers/global-setup.js @@ -27,6 +27,7 @@ exports.startApplication = async (configFilename, exec) => { process.env.MM_CONFIG_FILE = configFilename; } process.env.mmTestMode = "true"; + process.setMaxListeners(0); if (exec) exec; global.app = require("../../../js/app"); diff --git a/tests/e2e/helpers/mock-console.js b/tests/e2e/helpers/mock-console.js deleted file mode 100644 index 53158ed2..00000000 --- a/tests/e2e/helpers/mock-console.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Suppresses errors concerning web server already shut down. - * @param {string} err The error message. - */ -const mockError = (err) => { - if ( - err.includes("ECONNREFUSED") - || err.includes("ECONNRESET") - || err.includes("socket hang up") - || err.includes("exports is not defined") - || err.includes("module is not defined") - || err.includes("write EPIPE") - || err.includes("AggregateError") - || err.includes("ERR_SOCKET_CONNECTION_TIMEOUT") - ) { - jest.fn(); - } else { - console.dir(err); - } -}; - -global.console = { - log: jest.fn(), - dir: console.dir, - error: mockError, - warn: console.warn, - info: jest.fn(), - debug: console.debug -}; - -process.setMaxListeners(0); diff --git a/tests/e2e/modules/newsfeed_spec.js b/tests/e2e/modules/newsfeed_spec.js index 1c3c4d28..f93e3ca7 100644 --- a/tests/e2e/modules/newsfeed_spec.js +++ b/tests/e2e/modules/newsfeed_spec.js @@ -84,9 +84,7 @@ describe("Newsfeed module", () => { describe("Newsfeed module located in config directory", () => { beforeAll(() => { const baseDir = `${__dirname}/../../..`; - if (!fs.existsSync(`${baseDir}/config/newsfeed`)) { - fs.cpSync(`${baseDir}/modules/default/newsfeed`, `${baseDir}/config/newsfeed`, { recursive: true }); - } + fs.cpSync(`${baseDir}/modules/default/newsfeed`, `${baseDir}/config/newsfeed`, { recursive: true }); process.env.MM_MODULES_DIR = "config"; });