-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathlogger.setup-file.ts
More file actions
78 lines (73 loc) · 2.74 KB
/
Copy pathlogger.setup-file.ts
File metadata and controls
78 lines (73 loc) · 2.74 KB
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
import ansis from 'ansis';
import cliSpinners from 'cli-spinners';
import { type MockInstance, afterAll, beforeAll, vi } from 'vitest';
const loggerSpies: MockInstance[] = [];
beforeAll(async () => {
const { logger }: typeof import('@code-pushup/utils') =
await vi.importActual('@code-pushup/utils');
// TODO: use vi.mockObject after Vitest update: https://vitest.dev/api/vi.html#vi-mockobject-3-2-0
if (process.env['NX_VERBOSE_LOGGING'] === 'true') {
// only track calls, but preserve original implementation so logs are printed
loggerSpies.push(
vi.spyOn(logger, 'error'),
vi.spyOn(logger, 'warn'),
vi.spyOn(logger, 'info'),
vi.spyOn(logger, 'debug'),
vi.spyOn(logger, 'newline'),
vi.spyOn(logger, 'group'),
vi.spyOn(logger, 'task'),
vi.spyOn(logger, 'command'),
);
} else {
// track calls and silence logs
loggerSpies.push(
vi.spyOn(logger, 'error').mockImplementation(() => {}),
vi.spyOn(logger, 'warn').mockImplementation(() => {}),
vi.spyOn(logger, 'info').mockImplementation(() => {}),
vi.spyOn(logger, 'debug').mockImplementation(() => {}),
vi.spyOn(logger, 'newline').mockImplementation(() => {}),
// make sure worker still gets executed
vi.spyOn(logger, 'group').mockImplementation(async (_, worker) => {
const value = await worker();
return typeof value === 'object' ? value.result : undefined;
}),
vi.spyOn(logger, 'task').mockImplementation(async (_, worker) => {
const value = await worker();
return typeof value === 'object' ? value.result : undefined;
}),
vi.spyOn(logger, 'command').mockImplementation((_, worker) => worker()),
);
}
});
afterAll(() => {
loggerSpies.forEach(loggerSpy => {
loggerSpy.mockRestore();
});
});
// customize ora options for test environment
vi.mock('ora', async (): Promise<typeof import('ora')> => {
const oraModule = await vi.importActual<typeof import('ora')>('ora');
return {
...oraModule,
default: options => {
const spinner = oraModule.default({
// skip cli-cursor package
hideCursor: false,
// skip is-interactive package
isEnabled: process.env['CI'] !== 'true',
// skip is-unicode-supported package
spinner: cliSpinners.dots,
// preserve other options
...(typeof options === 'string' ? { text: options } : options),
});
// skip log-symbols package
vi.spyOn(spinner, 'succeed').mockImplementation(text =>
spinner.stopAndPersist({ text, symbol: ansis.green('✔') }),
);
vi.spyOn(spinner, 'fail').mockImplementation(text =>
spinner.stopAndPersist({ text, symbol: ansis.red('✖') }),
);
return spinner;
},
};
});