Skip to content

Commit 294b3d3

Browse files
committed
feat(register): add test when navigator undefined
1 parent b3e97a8 commit 294b3d3

File tree

4 files changed

+73
-47
lines changed

4 files changed

+73
-47
lines changed

docs/FAQ.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
- [Questions?](#questions)
66
- [iPad Status?](#ipad-status)
7-
- [Community Projects (awesome-code-server)](#awesome-code-server)
7+
- [Community Projects (awesome-code-server)](#community-projects-awesome-code-server)
88
- [How can I reuse my VS Code configuration?](#how-can-i-reuse-my-vs-code-configuration)
99
- [Differences compared to VS Code?](#differences-compared-to-vs-code)
1010
- [How can I request a missing extension?](#how-can-i-request-a-missing-extension)
@@ -43,7 +43,7 @@ Please file all questions and support requests at https://github.com/cdr/code-se
4343

4444
Please see [./ipad.md](./ipad.md).
4545

46-
## Community projects (awesome-code-server)
46+
## Community Projects (awesome-code-server)
4747

4848
Visit the [awesome-code-server](https://github.com/cdr/awesome-code-server) repository to view community projects and guides with code-server! Feel free to add your own!
4949

docs/install.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
- [Standalone Releases](#standalone-releases)
1515
- [Docker](#docker)
1616
- [helm](#helm)
17-
- [App Engines (Azure, Heroku)](#app-engines)
17+
- [App Engines (Azure, Heroku)](#app-engines-azure-heroku)
1818

1919
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
2020

test/constants.test.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
// Note: we need to import logger from the root
2-
// because this is the logger used in logError in ../src/common/util
3-
// import { logger } from "../node_modules/@coder/logger"
41
import { commit, getPackageJson, version } from "../src/node/constants"
52
import { loggerModule } from "./helpers"
63

test/register.test.ts

Lines changed: 70 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,88 @@
11
import { JSDOM } from "jsdom"
22
import { loggerModule } from "./helpers"
33

4-
// jest.mock is hoisted above the imports so we must use `require` here.
5-
jest.mock("@coder/logger", () => require("./helpers").loggerModule)
6-
74
describe("register", () => {
8-
const { window } = new JSDOM()
9-
global.window = (window as unknown) as Window & typeof globalThis
10-
global.document = window.document
11-
global.navigator = window.navigator
12-
global.location = window.location
5+
describe("when navigator and serviceWorker are defined", () => {
6+
const mockRegisterFn = jest.fn()
137

14-
const mockRegisterFn = jest.fn()
8+
beforeAll(() => {
9+
const { window } = new JSDOM()
10+
global.window = (window as unknown) as Window & typeof globalThis
11+
global.document = window.document
12+
global.navigator = window.navigator
13+
global.location = window.location
1514

16-
beforeAll(() => {
17-
Object.defineProperty(global.navigator, "serviceWorker", {
18-
value: {
19-
register: mockRegisterFn,
20-
},
15+
Object.defineProperty(global.navigator, "serviceWorker", {
16+
value: {
17+
register: mockRegisterFn,
18+
},
19+
})
2120
})
22-
})
2321

24-
afterEach(() => {
25-
mockRegisterFn.mockClear()
26-
jest.resetModules()
27-
})
22+
beforeEach(() => {
23+
jest.mock("@coder/logger", () => loggerModule)
24+
})
2825

29-
afterAll(() => {
30-
jest.restoreAllMocks()
31-
})
26+
afterEach(() => {
27+
mockRegisterFn.mockClear()
28+
jest.resetModules()
29+
})
30+
31+
afterAll(() => {
32+
jest.restoreAllMocks()
33+
34+
// We don't want these to stay around because it can affect other tests
35+
global.window = (undefined as unknown) as Window & typeof globalThis
36+
global.document = (undefined as unknown) as Document & typeof globalThis
37+
global.navigator = (undefined as unknown) as Navigator & typeof globalThis
38+
global.location = (undefined as unknown) as Location & typeof globalThis
39+
})
3240

33-
it("should register a ServiceWorker", () => {
34-
// Load service worker like you would in the browser
35-
require("../src/browser/register")
36-
// Load service worker like you would in the browser
37-
expect(mockRegisterFn).toHaveBeenCalled()
38-
expect(mockRegisterFn).toHaveBeenCalledTimes(1)
41+
it("should register a ServiceWorker", () => {
42+
// Load service worker like you would in the browser
43+
require("../src/browser/register")
44+
// Load service worker like you would in the browser
45+
expect(mockRegisterFn).toHaveBeenCalled()
46+
expect(mockRegisterFn).toHaveBeenCalledTimes(1)
47+
})
48+
49+
it("should log an error if something doesn't work", () => {
50+
const message = "Can't find browser"
51+
const error = new Error(message)
52+
53+
mockRegisterFn.mockImplementation(() => {
54+
throw error
55+
})
56+
57+
// Load service worker like you would in the browser
58+
require("../src/browser/register")
59+
60+
expect(mockRegisterFn).toHaveBeenCalled()
61+
expect(loggerModule.logger.error).toHaveBeenCalled()
62+
expect(loggerModule.logger.error).toHaveBeenCalledTimes(1)
63+
expect(loggerModule.logger.error).toHaveBeenCalledWith(
64+
`[Service Worker] registration: ${error.message} ${error.stack}`,
65+
)
66+
})
3967
})
4068

41-
it("should log an error if something doesn't work", () => {
42-
const message = "Can't find browser"
43-
const error = new Error(message)
69+
describe("when navigator and serviceWorker are NOT defined", () => {
70+
let spy: jest.SpyInstance
4471

45-
mockRegisterFn.mockImplementation(() => {
46-
throw error
72+
beforeEach(() => {
73+
spy = jest.spyOn(console, "error")
4774
})
4875

49-
// Load service worker like you would in the browser
50-
require("../src/browser/register")
76+
afterAll(() => {
77+
jest.restoreAllMocks()
78+
})
5179

52-
expect(mockRegisterFn).toHaveBeenCalled()
53-
expect(loggerModule.logger.error).toHaveBeenCalled()
54-
expect(loggerModule.logger.error).toHaveBeenCalledTimes(1)
55-
expect(loggerModule.logger.error).toHaveBeenCalledWith(
56-
`[Service Worker] registration: ${error.message} ${error.stack}`,
57-
)
80+
it("should log an error to the console", () => {
81+
// Load service worker like you would in the browser
82+
require("../src/browser/register")
83+
expect(spy).toHaveBeenCalled()
84+
expect(spy).toHaveBeenCalledTimes(1)
85+
expect(spy).toHaveBeenCalledWith("[Service Worker] navigator is undefined")
86+
})
5887
})
5988
})

0 commit comments

Comments
 (0)