DocSpace-client/web/ASC.Web.Components/test/setup-tests.js

77 lines
2.2 KiB
JavaScript

import fs from 'fs';
import path from 'path';
import colors from 'colors/safe';
const shouldSilenceWarnings = (...messages) =>
[/Warning: componentWillReceiveProps has been renamed/].some(msgRegex =>
messages.some(msg => msgRegex.test(msg))
);
global.window.app = {
mcApiUrl: 'http://localhost:8080',
};
// setup file
const logOrThrow = (log, method, messages) => {
const warning = `console.${method} calls not allowed in tests`;
if (process.env.CI) {
if (shouldSilenceWarnings(messages)) {
return;
}
log(warning, '\n', ...messages);
throw new Error(warning);
} else {
log(colors.bgYellow.black(' WARN '), warning, '\n', ...messages);
}
};
// eslint-disable-next-line no-console
const logMessage = console.log;
global.console.log = (...messages) => {
logOrThrow(logMessage, 'log', messages);
};
// eslint-disable-next-line no-console
const logInfo = console.info;
global.console.info = (...messages) => {
logOrThrow(logInfo, 'info', messages);
};
// eslint-disable-next-line no-console
const logWarning = console.warn;
global.console.warn = (...messages) => {
logOrThrow(logWarning, 'warn', messages);
};
// eslint-disable-next-line no-console
const logError = console.error;
global.console.error = (...messages) => {
logOrThrow(logError, 'error', messages);
};
// Avoid unhandled promise rejections from going unnoticed
// https://github.com/facebook/jest/issues/3251#issuecomment-299183885
// In Node v7 unhandled promise rejections will terminate the process
if (!process.env.LISTENING_TO_UNHANDLED_REJECTION) {
process.on('unhandledRejection', reason => {
logMessage('UNHANDLED REJECTION', reason);
// We create a file in case there is an unhandled rejection
// We later check for the existence of this file to fail CI
if (process.env.CI && !process.env.HAS_CREATED_UNHANDLED_REJECTION_FILE) {
const rootPath = process.cwd();
fs.writeFileSync(
path.join(
rootPath,
'./fail-tests-because-there-was-an-unhandled-rejection.lock'
),
''
);
process.env.HAS_CREATED_UNHANDLED_REJECTION_FILE = true;
}
});
// Avoid memory leak by adding too many listeners
process.env.LISTENING_TO_UNHANDLED_REJECTION = true;
}