// `structuredClone` is not yet in jsdom https://github.com/jsdom/jsdom/issues/3363 import 'core-js/stable/structured-clone'; import 'whatwg-fetch'; import '@testing-library/jest-dom'; import { configure } from '@testing-library/react'; import i18next from 'i18next'; import failOnConsole from 'jest-fail-on-console'; import { initReactI18next } from 'react-i18next'; import getEnvConfig from '../../scripts/webpack/env-util'; import { matchers } from './matchers'; const config = getEnvConfig() as Record; if (config.frontend_dev_fail_tests_on_console || process.env.CI) { failOnConsole({ shouldFailOnLog: true, shouldFailOnDebug: true, shouldFailOnInfo: true, }); } expect.extend(matchers); i18next.use(initReactI18next).init({ resources: {}, returnEmptyString: false, lng: 'en-US', // this should be the locale of the phrases in our source JSX }); // mock out the worker that detects changes in the dashboard // The mock is needed because JSDOM does not support workers and // the factory uses import.meta.url so we can't use it in CommonJS modules. jest.mock('app/features/dashboard-scene/saving/createDetectChangesWorker.ts'); // our tests are heavy in CI due to parallelisation and monaco and kusto // so we increase the default timeout to 2secs to avoid flakiness configure({ asyncUtilTimeout: 2000 }); // Mock Performance API methods not implemented in jsdom if (window.performance) { // Type-safe spies with proper return type definitions if (!window.performance.mark) { window.performance.mark = jest.mocked((markName: string) => { return { name: markName, entryType: 'mark', startTime: 0, duration: 0, detail: null, toJSON: () => ({}), }; }); } if (!window.performance.measure) { window.performance.measure = jest.mocked((measureName: string) => { return { name: measureName, entryType: 'measure', startTime: 0, duration: 100, detail: null, toJSON: () => ({}), }; }); } if (!window.performance.getEntriesByName) { window.performance.getEntriesByName = jest.mocked(() => []); } if (!window.performance.clearMarks) { window.performance.clearMarks = jest.mocked(() => {}); } if (!window.performance.clearMeasures) { window.performance.clearMeasures = jest.mocked(() => {}); } }