2021-02-11 23:02:49 +01:00
|
|
|
import { JSDOM } from "jsdom"
|
2021-02-23 21:54:22 +01:00
|
|
|
import { loggerModule } from "./helpers"
|
2021-02-11 23:02:49 +01:00
|
|
|
|
2021-02-24 00:11:04 +01:00
|
|
|
// jest.mock is hoisted above the imports so we must use `require` here.
|
|
|
|
jest.mock("@coder/logger", () => require("./helpers").loggerModule)
|
|
|
|
|
2021-02-11 23:02:49 +01:00
|
|
|
describe("register", () => {
|
2021-02-22 23:50:26 +01:00
|
|
|
const { window } = new JSDOM()
|
|
|
|
global.window = (window as unknown) as Window & typeof globalThis
|
|
|
|
global.document = window.document
|
|
|
|
global.navigator = window.navigator
|
|
|
|
global.location = window.location
|
|
|
|
|
2021-02-23 20:30:48 +01:00
|
|
|
const mockRegisterFn = jest.fn()
|
2021-02-22 23:50:26 +01:00
|
|
|
|
|
|
|
beforeAll(() => {
|
|
|
|
Object.defineProperty(global.navigator, "serviceWorker", {
|
|
|
|
value: {
|
|
|
|
register: mockRegisterFn,
|
|
|
|
},
|
2021-02-11 23:23:07 +01:00
|
|
|
})
|
2021-02-22 23:50:26 +01:00
|
|
|
})
|
2021-02-12 00:51:48 +01:00
|
|
|
|
2021-02-22 23:50:26 +01:00
|
|
|
afterEach(() => {
|
2021-02-23 20:30:48 +01:00
|
|
|
mockRegisterFn.mockClear()
|
2021-02-22 23:50:26 +01:00
|
|
|
jest.resetModules()
|
2021-02-12 00:51:48 +01:00
|
|
|
})
|
|
|
|
|
2021-02-22 23:50:26 +01:00
|
|
|
afterAll(() => {
|
|
|
|
jest.restoreAllMocks()
|
|
|
|
})
|
2021-02-12 00:51:48 +01:00
|
|
|
|
2021-02-22 23:50:26 +01:00
|
|
|
it("should register a ServiceWorker", () => {
|
|
|
|
// Load service worker like you would in the browser
|
|
|
|
require("../src/browser/register")
|
|
|
|
// Load service worker like you would in the browser
|
2021-02-23 20:30:48 +01:00
|
|
|
expect(mockRegisterFn).toHaveBeenCalled()
|
|
|
|
expect(mockRegisterFn).toHaveBeenCalledTimes(1)
|
2021-02-22 23:50:26 +01:00
|
|
|
})
|
2021-02-12 00:51:48 +01:00
|
|
|
|
2021-02-22 23:50:26 +01:00
|
|
|
it("should log an error if something doesn't work", () => {
|
|
|
|
const message = "Can't find browser"
|
|
|
|
const error = new Error(message)
|
2021-02-12 00:51:48 +01:00
|
|
|
|
2021-02-22 23:50:26 +01:00
|
|
|
mockRegisterFn.mockImplementation(() => {
|
|
|
|
throw error
|
2021-02-12 00:51:48 +01:00
|
|
|
})
|
|
|
|
|
2021-02-22 23:50:26 +01:00
|
|
|
// Load service worker like you would in the browser
|
|
|
|
require("../src/browser/register")
|
2021-02-12 00:51:48 +01:00
|
|
|
|
2021-02-23 20:30:48 +01:00
|
|
|
expect(mockRegisterFn).toHaveBeenCalled()
|
|
|
|
expect(loggerModule.logger.error).toHaveBeenCalled()
|
2021-02-23 21:54:22 +01:00
|
|
|
expect(loggerModule.logger.error).toHaveBeenCalledTimes(1)
|
|
|
|
expect(loggerModule.logger.error).toHaveBeenCalledWith(
|
|
|
|
`[Service Worker] registration: ${error.message} ${error.stack}`,
|
|
|
|
)
|
2021-02-11 23:02:49 +01:00
|
|
|
})
|
|
|
|
})
|