/
version-checkers.spec.ts
88 lines (70 loc) · 2.96 KB
/
version-checkers.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import { logTargetMock } from '../__helpers__/mocks'
import * as _pv from './get-package-version'
import { VersionChecker, VersionCheckers } from './version-checkers'
const logTarget = logTargetMock()
beforeEach(() => {
logTarget.clear()
})
jest.mock('./get-package-version')
const pv = jest.mocked(_pv)
describeChecker(VersionCheckers.jest, 'jest', ['27.0.0'], [undefined, '23.6.0', '24.1.0', '28.0.0'])
describeChecker(VersionCheckers.babelJest, 'babel-jest', ['27.0.0'], [undefined, '23.6.0', '24.1.0', '28.0.0'])
describeChecker(VersionCheckers.babelCore, '@babel/core', ['7.0.0'], [undefined, '6.0.0', '8.0.0'])
describeChecker(VersionCheckers.typescript, 'typescript', ['4.3.0', '4.3.5'], [undefined, '4.2.0', '5.0.0'])
function describeChecker(
checker: VersionChecker,
moduleName: string,
supportedVersions: string[],
unsupportedVersions: Array<string | undefined>,
) {
// eslint-disable-next-line jest/valid-title
describe(moduleName, () => {
beforeEach(() => {
checker.forget()
})
unsupportedVersions.forEach((testVersion) => {
describe(`unsupported version (${testVersion})`, () => {
beforeEach(() => {
pv.getPackageVersion.mockImplementation((name) => (name === moduleName ? testVersion : undefined))
})
it('should log with warn()', () => {
checker.warn()
const warnings = logTarget.messages.warn
expect(warnings).toHaveLength(1)
expect(warnings[0].message).toMatch(testVersion ? 'has not been tested with ts-jest' : 'is not installed')
})
it('should log only once with warn()', () => {
checker.warn()
checker.warn()
expect(logTarget.messages.warn).toHaveLength(1)
})
it('should throw with raise()', () => {
expect(checker.raise).toThrow()
// adds another time as it should throw all the time even if already called
expect(checker.raise).toThrow()
})
it('should not log or throw when TS_JEST_DISABLE_VER_CHECKER is set in process.env', () => {
process.env.TS_JEST_DISABLE_VER_CHECKER = 'true'
checker.warn()
expect(logTarget.messages.warn).toHaveLength(0)
expect(checker.raise).not.toThrow()
delete process.env.TS_JEST_DISABLE_VER_CHECKER
})
}) // describe unsupported version
}) // unsupported versions loop
supportedVersions.forEach((testVersion) => {
describe(`supported version (${testVersion})`, () => {
beforeEach(() => {
pv.getPackageVersion.mockImplementation((name) => (name === moduleName ? testVersion : undefined))
})
it('should not log with warn()', () => {
checker.warn()
expect(logTarget.messages.warn).toHaveLength(0)
})
it('should not throw with raise()', () => {
expect(checker.raise).not.toThrow()
})
}) // describe supported version
}) // supported versions loop
}) // describe module
}