Skip to content

Commit eb34f4b

Browse files
committed
Fix helpers not working in e2e tests
It errors that jest is not defined so put it behind a function instead of immediately creating the mock (this is probably a better pattern anyway). The constant tests had to be reworked a little because since the logger mock is hoisted it runs before createLoggerMock is imported. I moved it into a beforeAll which means the require call also needed to be moved into there (since we need to mock the logger before requiring the constants or it'll pull the non-mocked logger). To avoid having to define a type for getPackageJson I just added a let var set to the type of the imported constants file and modified the other areas to use the same paradigm. I also replaced some hardcoded strings with the mocked package.json object.
1 parent ad4a70c commit eb34f4b

File tree

4 files changed

+40
-44
lines changed

4 files changed

+40
-44
lines changed

test/unit/constants.test.ts

+19-32
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,22 @@
1-
import { loggerModule } from "../utils/helpers"
2-
3-
// jest.mock is hoisted above the imports so we must use `require` here.
4-
jest.mock("@coder/logger", () => require("../utils/helpers").loggerModule)
1+
import { createLoggerMock } from "../utils/helpers"
52

63
describe("constants", () => {
7-
beforeAll(() => {
8-
jest.clearAllMocks()
9-
jest.resetModules()
10-
})
4+
let constants: typeof import("../../src/node/constants")
5+
116
describe("with package.json defined", () => {
12-
const { getPackageJson } = require("../../src/node/constants")
13-
let mockPackageJson = {
7+
const loggerModule = createLoggerMock()
8+
const mockPackageJson = {
149
name: "mock-code-server",
1510
description: "Run VS Code on a remote server.",
1611
repository: "https://github.com/cdr/code-server",
1712
version: "1.0.0",
1813
commit: "f6b2be2838f4afb217c2fd8f03eafedd8d55ef9b",
1914
}
20-
let version = ""
21-
let commit = ""
2215

23-
beforeEach(() => {
16+
beforeAll(() => {
17+
jest.mock("@coder/logger", () => loggerModule)
2418
jest.mock("../../package.json", () => mockPackageJson, { virtual: true })
25-
commit = require("../../src/node/constants").commit
26-
version = require("../../src/node/constants").version
19+
constants = require("../../src/node/constants")
2720
})
2821

2922
afterAll(() => {
@@ -32,18 +25,18 @@ describe("constants", () => {
3225
})
3326

3427
it("should provide the commit", () => {
35-
expect(commit).toBe("f6b2be2838f4afb217c2fd8f03eafedd8d55ef9b")
28+
expect(constants.commit).toBe(mockPackageJson.commit)
3629
})
3730

3831
it("should return the package.json version", () => {
39-
expect(version).toBe(mockPackageJson.version)
32+
expect(constants.version).toBe(mockPackageJson.version)
4033
})
4134

4235
describe("getPackageJson", () => {
4336
it("should log a warning if package.json not found", () => {
4437
const expectedErrorMessage = "Cannot find module './package.json' from 'src/node/constants.ts'"
4538

46-
getPackageJson("./package.json")
39+
constants.getPackageJson("./package.json")
4740

4841
expect(loggerModule.logger.warn).toHaveBeenCalled()
4942
expect(loggerModule.logger.warn).toHaveBeenCalledWith(expectedErrorMessage)
@@ -52,38 +45,32 @@ describe("constants", () => {
5245
it("should find the package.json", () => {
5346
// the function calls require from src/node/constants
5447
// so to get the root package.json we need to use ../../
55-
const packageJson = getPackageJson("../../package.json")
56-
expect(Object.keys(packageJson).length).toBeGreaterThan(0)
57-
expect(packageJson.name).toBe("mock-code-server")
58-
expect(packageJson.description).toBe("Run VS Code on a remote server.")
59-
expect(packageJson.repository).toBe("https://github.com/cdr/code-server")
48+
const packageJson = constants.getPackageJson("../../package.json")
49+
expect(packageJson).toStrictEqual(mockPackageJson)
6050
})
6151
})
6252
})
6353

6454
describe("with incomplete package.json", () => {
65-
let mockPackageJson = {
55+
const mockPackageJson = {
6656
name: "mock-code-server",
6757
}
68-
let version = ""
69-
let commit = ""
7058

71-
beforeEach(() => {
59+
beforeAll(() => {
7260
jest.mock("../../package.json", () => mockPackageJson, { virtual: true })
73-
version = require("../../src/node/constants").version
74-
commit = require("../../src/node/constants").commit
61+
constants = require("../../src/node/constants")
7562
})
7663

77-
afterEach(() => {
64+
afterAll(() => {
7865
jest.clearAllMocks()
7966
jest.resetModules()
8067
})
8168

8269
it("version should return 'development'", () => {
83-
expect(version).toBe("development")
70+
expect(constants.version).toBe("development")
8471
})
8572
it("commit should return 'development'", () => {
86-
expect(commit).toBe("development")
73+
expect(constants.commit).toBe("development")
8774
})
8875
})
8976
})

test/unit/register.test.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { JSDOM } from "jsdom"
22
import { registerServiceWorker } from "../../src/browser/register"
3-
import { loggerModule } from "../utils/helpers"
3+
import { createLoggerMock } from "../utils/helpers"
44
import { LocationLike } from "./util.test"
55

66
describe("register", () => {
@@ -21,6 +21,7 @@ describe("register", () => {
2121
})
2222
})
2323

24+
const loggerModule = createLoggerMock()
2425
beforeEach(() => {
2526
jest.clearAllMocks()
2627
jest.mock("@coder/logger", () => loggerModule)
@@ -75,6 +76,7 @@ describe("register", () => {
7576
})
7677

7778
describe("when navigator and serviceWorker are NOT defined", () => {
79+
const loggerModule = createLoggerMock()
7880
beforeEach(() => {
7981
jest.clearAllMocks()
8082
jest.mock("@coder/logger", () => loggerModule)

test/unit/util.test.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
trimSlashes,
1212
normalize,
1313
} from "../../src/common/util"
14-
import { loggerModule } from "../utils/helpers"
14+
import { createLoggerMock } from "../utils/helpers"
1515

1616
const dom = new JSDOM()
1717
global.document = dom.window.document
@@ -229,6 +229,8 @@ describe("util", () => {
229229
jest.restoreAllMocks()
230230
})
231231

232+
const loggerModule = createLoggerMock()
233+
232234
it("should log an error with the message and stack trace", () => {
233235
const message = "You don't have access to that folder."
234236
const error = new Error(message)

test/utils/helpers.ts

+15-10
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,21 @@ import * as fs from "fs"
22
import * as os from "os"
33
import * as path from "path"
44

5-
export const loggerModule = {
6-
field: jest.fn(),
7-
level: 2,
8-
logger: {
9-
debug: jest.fn(),
10-
error: jest.fn(),
11-
info: jest.fn(),
12-
trace: jest.fn(),
13-
warn: jest.fn(),
14-
},
5+
/**
6+
* Return a mock of @coder/logger.
7+
*/
8+
export function createLoggerMock() {
9+
return {
10+
field: jest.fn(),
11+
level: 2,
12+
logger: {
13+
debug: jest.fn(),
14+
error: jest.fn(),
15+
info: jest.fn(),
16+
trace: jest.fn(),
17+
warn: jest.fn(),
18+
},
19+
}
1520
}
1621

1722
/**

0 commit comments

Comments
 (0)