-
Notifications
You must be signed in to change notification settings - Fork 3
/
consoleSpy.ts
41 lines (33 loc) · 934 Bytes
/
consoleSpy.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
/* eslint-disable no-console */
export interface ConsoleSpyMsg {
type: 'log' | 'warn' | 'error'
code?: string
args: unknown[]
}
export interface ConsoleSpy {
messages: ConsoleSpyMsg[]
restore: () => void
}
export function createConsoleSpy(options?: {
onRestored?: (messages: ConsoleSpyMsg[]) => void
}): ConsoleSpy {
const {onRestored} = options || {}
const original = {
log: console.log,
warn: console.warn,
error: console.error,
}
const messages: ConsoleSpyMsg[] = []
console.log = (...args: unknown[]) => messages.push({type: 'log', args})
console.warn = (...args: unknown[]) => messages.push({type: 'warn', args})
console.error = (...args: unknown[]) => messages.push({type: 'error', args})
return {
messages,
restore: () => {
console.log = original.log
console.warn = original.warn
console.error = original.error
onRestored?.(messages)
},
}
}