feat: test failure to register service worker
This commit is contained in:
parent
a9f88affa9
commit
44b9874fbe
|
@ -17,8 +17,7 @@ export async function registerServiceWorker(navigator: Navigator, path: string,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof navigator !== "undefined" && "serviceWorker" in navigator) {
|
if (typeof navigator !== "undefined" && "serviceWorker" in navigator) {
|
||||||
const options = getOptions()
|
const options = getOptions()
|
||||||
const path = normalize(`${options.csStaticBase}/dist/serviceWorker.js`)
|
const path = normalize(`${options.csStaticBase}/dist/serviceWorker.js`)
|
||||||
registerServiceWorker(navigator, path, options)
|
registerServiceWorker(navigator, path, options)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
import { JSDOM } from "jsdom"
|
import { JSDOM } from "jsdom"
|
||||||
|
// Note: we need to import logger from the root
|
||||||
|
// because this is the logger used in logError in ../src/common/util
|
||||||
|
import { logger } from "../node_modules/@coder/logger"
|
||||||
import { registerServiceWorker } from "../src/browser/register"
|
import { registerServiceWorker } from "../src/browser/register"
|
||||||
const { window } = new JSDOM()
|
const { window } = new JSDOM()
|
||||||
global.window = (window as unknown) as Window & typeof globalThis
|
global.window = (window as unknown) as Window & typeof globalThis
|
||||||
|
@ -6,38 +9,63 @@ global.document = window.document
|
||||||
global.navigator = window.navigator
|
global.navigator = window.navigator
|
||||||
|
|
||||||
describe("register", () => {
|
describe("register", () => {
|
||||||
const spy = jest.fn()
|
describe("registerServiceWorker", () => {
|
||||||
beforeAll(() => {
|
const spy = jest.fn()
|
||||||
// register relies on navigator to be defined globally
|
let loggerSpy: jest.SpyInstance
|
||||||
// this is because the code is called on the browser
|
|
||||||
// so we're sure it will be defined
|
beforeAll(() => {
|
||||||
// We have to cast/assert so that TS thinks it's the correct type
|
Object.defineProperty(global.navigator, "serviceWorker", {
|
||||||
Object.defineProperty(global.navigator, "serviceWorker", {
|
value: {
|
||||||
value: {
|
register: () => {
|
||||||
register: spy,
|
return "hello"
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
})
|
})
|
||||||
// global.navigator.serviceWorker.register = (spy as unknown) as ServiceWorkerContainer["register"]
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetAllMocks()
|
loggerSpy = jest.spyOn(logger, "error")
|
||||||
})
|
})
|
||||||
|
|
||||||
afterAll(() => {
|
afterEach(() => {
|
||||||
jest.restoreAllMocks()
|
jest.resetAllMocks()
|
||||||
})
|
})
|
||||||
it("should register a ServiceWorker", () => {
|
|
||||||
// call registerServiceWorker
|
afterAll(() => {
|
||||||
const path = "/hello"
|
jest.restoreAllMocks()
|
||||||
const mockOptions = {
|
})
|
||||||
base: "",
|
|
||||||
csStaticBase: "",
|
it("should register a ServiceWorker", () => {
|
||||||
logLevel: 0,
|
global.navigator.serviceWorker.register = spy
|
||||||
}
|
// call registerServiceWorker
|
||||||
registerServiceWorker(navigator, path, mockOptions)
|
const path = "/hello"
|
||||||
// expect spy to have been called
|
const mockOptions = {
|
||||||
expect(spy).toHaveBeenCalled()
|
base: "",
|
||||||
expect(spy).toHaveBeenCalledTimes(1)
|
csStaticBase: "",
|
||||||
|
logLevel: 0,
|
||||||
|
}
|
||||||
|
registerServiceWorker(navigator, path, mockOptions)
|
||||||
|
// expect spy to have been called
|
||||||
|
expect(spy).toHaveBeenCalled()
|
||||||
|
expect(spy).toHaveBeenCalledTimes(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should log an error if something goes work", () => {
|
||||||
|
const message = "Can't find browser"
|
||||||
|
const path = "/hello"
|
||||||
|
const mockOptions = {
|
||||||
|
base: "",
|
||||||
|
csStaticBase: "",
|
||||||
|
logLevel: 0,
|
||||||
|
}
|
||||||
|
global.navigator.serviceWorker.register = () => {
|
||||||
|
throw new Error(message)
|
||||||
|
}
|
||||||
|
|
||||||
|
registerServiceWorker(navigator, path, mockOptions)
|
||||||
|
expect(loggerSpy).toHaveBeenCalled()
|
||||||
|
expect(loggerSpy).toHaveBeenCalledTimes(1)
|
||||||
|
expect(loggerSpy).toHaveBeenCalledWith(`[Service Worker] failed to register: ${message}`)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue