Files
sentinel/static/app/bootstrap/renderOnDomReady.spec.tsx
2024-02-15 17:01:50 +00:00

39 lines
1.0 KiB
TypeScript

import {renderOnDomReady} from 'sentry/bootstrap/renderOnDomReady';
describe('renderOnDomReady', function () {
it('immediately runs callback if `document.readyState` is not loading', function () {
const cb = jest.fn();
renderOnDomReady(cb);
expect(cb).toHaveBeenCalledTimes(1);
});
it('runs callbacks after `DOMContentLoaded` is fired', function () {
const cb = jest.fn();
const cb2 = jest.fn();
Object.defineProperty(document, 'readyState', {
configurable: true,
get() {
return 'loading';
},
});
renderOnDomReady(cb);
renderOnDomReady(cb2);
expect(cb).toHaveBeenCalledTimes(0);
// Dispatch `DOMContentLoaded` event
const event = document.createEvent('Event');
event.initEvent('DOMContentLoaded', true, true);
document.dispatchEvent(event);
expect(cb).toHaveBeenCalledTimes(1);
expect(cb2).toHaveBeenCalledTimes(1);
// Reset `readyState`
Object.defineProperty(document, 'readyState', {
get() {
return 'complete';
},
});
});
});