code-server/test/register.test.ts
2021-02-26 11:51:52 -07:00

68 lines
1.6 KiB
TypeScript

import { field, Level } from "@coder/logger"
import { JSDOM } from "jsdom"
describe("register", () => {
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
const mockRegisterFn = jest.fn()
const loggerModule = {
field,
level: Level.Info,
logger: {
debug: jest.fn(),
error: jest.fn(),
info: jest.fn(),
trace: jest.fn(),
warn: jest.fn(),
},
}
beforeAll(() => {
Object.defineProperty(global.navigator, "serviceWorker", {
value: {
register: mockRegisterFn,
},
})
})
beforeEach(() => {
jest.mock("@coder/logger", () => loggerModule)
})
afterEach(() => {
mockRegisterFn.mockClear()
jest.resetModules()
})
afterAll(() => {
jest.restoreAllMocks()
})
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
expect(mockRegisterFn).toHaveBeenCalled()
expect(mockRegisterFn).toHaveBeenCalledTimes(1)
})
it("should log an error if something doesn't work", () => {
const message = "Can't find browser"
const error = new Error(message)
mockRegisterFn.mockImplementation(() => {
throw error
})
// Load service worker like you would in the browser
require("../src/browser/register")
expect(mockRegisterFn).toHaveBeenCalled()
expect(loggerModule.logger.error).toHaveBeenCalled()
})
})