I'm looking for a way to set up navigator.serviceWorker to unit test my service worker. My current JSDOM setup looks like this:
import { JSDOM } from 'jsdom';
const dom = new JSDOM('<!DOCTYPE html><html><head></head><body></body></html>');
global.window = dom.window;
global.document = dom.window.document;
Object.keys(global.window).forEach(property => {
if (typeof global[property] === 'undefined') {
global[property] = global.window[property];
}
});
global.navigator = {
userAgent: 'node.js'
};
I've already tried commenting out global.navigator = ... for global.navigator = global.window.navigator. However, the following console.log(global.navigator.serviceWorker) and console.log(navigator.serviceWorker) both return undefined in my unit test:
describe('Service Worker', () => {
it('should register a service worker and cache files on install', () => {
console.log(navigator.serviceWorker); // undefined
// navigator.serviceWorker.register() // not used yet since undefined
});
});