diff --git a/test/register.test.ts b/test/register.test.ts new file mode 100644 index 000000000..54c8d9e46 --- /dev/null +++ b/test/register.test.ts @@ -0,0 +1,43 @@ +import { JSDOM } from "jsdom" +import { registerServiceWorker } from "../src/browser/register" +const { window } = new JSDOM() +global.window = (window as unknown) as Window & typeof globalThis +global.document = window.document +global.navigator = window.navigator + +describe("register", () => { + const spy = jest.fn() + beforeAll(() => { + // register relies on navigator to be defined globally + // this is because the code is called on the browser + // so we're sure it will be defined + // We have to cast/assert so that TS thinks it's the correct type + Object.defineProperty(global.navigator, "serviceWorker", { + value: { + register: spy, + }, + }) + // global.navigator.serviceWorker.register = (spy as unknown) as ServiceWorkerContainer["register"] + }) + + afterEach(() => { + jest.resetAllMocks() + }) + + afterAll(() => { + jest.restoreAllMocks() + }) + it("should register a ServiceWorker", () => { + // call registerServiceWorker + const path = "/hello" + const mockOptions = { + base: "", + csStaticBase: "", + logLevel: 0, + } + registerServiceWorker(navigator, path, mockOptions) + // expect spy to have been called + expect(spy).toHaveBeenCalled() + expect(spy).toHaveBeenCalledTimes(1) + }) +})