/** * globally import this, avoids needing to import it in each file * https://stackoverflow.com/a/65871118 */ import '@testing-library/jest-dom'; import 'plugin/dayjs'; import { TextEncoder, TextDecoder } from 'util'; jest.mock('@grafana/runtime', () => ({ __esModule: true, config: { featureToggles: {}, bootData: { user: { timezone: 'UTC', }, }, }, getBackendSrv: jest.fn().mockImplementation(() => ({ get: jest.fn(), post: jest.fn(), })), getLocationSrv: jest.fn(), })); Object.assign(global, { TextDecoder, TextEncoder }); // https://stackoverflow.com/a/66055672 // https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom Object.defineProperty(window, 'matchMedia', { writable: true, value: jest.fn().mockImplementation((query) => ({ matches: false, media: query, onchange: null, addListener: jest.fn(), // Deprecated removeListener: jest.fn(), // Deprecated addEventListener: jest.fn(), removeEventListener: jest.fn(), dispatchEvent: jest.fn(), })), }); Object.defineProperty(window, 'location', { configurable: true, value: { reload: jest.fn() }, }); Object.defineProperty(window, 'ResizeObserver', { writable: true, value: class ResizeObserver { constructor(callback: ResizeObserverCallback) { setTimeout(() => { callback( [ { contentRect: { x: 1, y: 2, width: 500, height: 500, top: 100, bottom: 0, left: 100, right: 0, }, target: {}, } as ResizeObserverEntry, ], this ); }); } observe() {} disconnect() {} unobserve() {} }, });