standard-log 6.2.6 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/standard-log.js +3697 -3688
  2. package/dist/standard-log.js.gz +0 -0
  3. package/dist/standard-log.js.map +1 -1
  4. package/dist/standard-log.js.map.gz +0 -0
  5. package/lib/captureLogs.d.ts.map +1 -1
  6. package/lib/captureLogs.js +1 -1
  7. package/lib/captureLogs.js.map +1 -1
  8. package/lib/config.d.ts.map +1 -1
  9. package/lib/config.js +10 -2
  10. package/lib/config.js.map +1 -1
  11. package/lib/configForTest.d.ts.map +1 -1
  12. package/lib/configForTest.js +2 -0
  13. package/lib/configForTest.js.map +1 -1
  14. package/lib/memory/MemoryLogReporter.d.ts +1 -0
  15. package/lib/memory/MemoryLogReporter.d.ts.map +1 -1
  16. package/lib/memory/MemoryLogReporter.js +7 -8
  17. package/lib/memory/MemoryLogReporter.js.map +1 -1
  18. package/libm/captureLogs.d.ts.map +1 -1
  19. package/libm/captureLogs.js +1 -1
  20. package/libm/captureLogs.js.map +1 -1
  21. package/libm/config.d.ts.map +1 -1
  22. package/libm/config.js +10 -2
  23. package/libm/config.js.map +1 -1
  24. package/libm/configForTest.d.ts.map +1 -1
  25. package/libm/configForTest.js +2 -0
  26. package/libm/configForTest.js.map +1 -1
  27. package/libm/memory/MemoryLogReporter.d.ts +1 -0
  28. package/libm/memory/MemoryLogReporter.d.ts.map +1 -1
  29. package/libm/memory/MemoryLogReporter.js +5 -7
  30. package/libm/memory/MemoryLogReporter.js.map +1 -1
  31. package/package.json +2 -2
  32. package/src/captureLogs.spec.ts +3 -1
  33. package/src/captureLogs.ts +2 -2
  34. package/src/config.spec.ts +15 -7
  35. package/src/config.ts +10 -2
  36. package/src/configForTest.ts +2 -0
  37. package/src/console/createConsoleLogReporter.spec.ts +135 -127
  38. package/src/getLogger.spec.ts +1 -1
  39. package/src/logReporter.spec.ts +78 -67
  40. package/src/memory/MemoryLogReporter.spec.ts +80 -76
  41. package/src/memory/MemoryLogReporter.ts +5 -7
@@ -1,177 +1,185 @@
1
- import a from 'assertron';
2
- import { addCustomLogLevel, clearCustomLogLevel, ConsoleLogFormatter, createConsoleLogReporter, LogFilter, logLevels, plainLogFormatter } from '..';
3
- import { config } from '../config';
4
- import { ProhibitedDuringProduction } from '../errors';
5
- import { store } from '../store';
6
-
7
- beforeEach(() => {
8
- store.reset()
9
- config({ mode: 'test' })
10
- })
1
+ import a from 'assertron'
2
+ import {
3
+ addCustomLogLevel, clearCustomLogLevel, config, configForTest,
4
+ ConsoleLogFormatter, createConsoleLogReporter,
5
+ LogFilter, logLevels, plainLogFormatter, ProhibitedDuringProduction
6
+ } from '..'
7
+ import { store } from '../store'
11
8
 
12
- describe('rendering tests', () => {
13
- test('plain rendering', () => {
14
- const reporter = createConsoleLogReporter({ formatter: plainLogFormatter });
15
- ['emergency', 'info', 'warn', 'debug'].forEach(level => {
16
- reporter.write({ id: 'plain', level: (logLevels as any)[level], args: ['hello', 'world'], timestamp: new Date() })
17
- })
18
- })
19
- })
9
+ describe('production checks', () => {
10
+ beforeEach(() => store.reset())
20
11
 
21
- describe('id', () => {
22
- test('default is "console"', () => {
12
+ test('set filter during production mode throws', () => {
13
+ config({ mode: 'production' })
23
14
  const reporter = createConsoleLogReporter()
24
- expect(reporter.id).toBe('console')
15
+ a.throws(() => { reporter.filter = () => true }, ProhibitedDuringProduction)
25
16
  })
26
- test('can be overridden', () => {
27
- const reporter = createConsoleLogReporter({ id: 'neo-console' })
28
- expect(reporter.id).toBe('neo-console')
17
+
18
+ const idFormatter: ConsoleLogFormatter = (entry) => [entry.id]
19
+ test('set formatter during production mode throws', () => {
20
+ config({ mode: 'production' })
21
+ const reporter = createConsoleLogReporter()
22
+ a.throws(() => reporter.formatter = idFormatter, ProhibitedDuringProduction)
29
23
  })
30
24
  })
31
25
 
32
- describe('log level', () => {
33
- test('error, alert, critical and emergency logs are written to console.error', () => {
34
- const id = 'log'
35
- const reporter = createConsoleLogReporter()
36
- const fakeConsole = reporter.console = createFakeConsole();
37
26
 
38
- reporter.write({ id, level: logLevels.emergency, args: ['emergency'], timestamp: new Date() })
39
- reporter.write({ id, level: logLevels.critical, args: ['critical'], timestamp: new Date() })
40
- reporter.write({ id, level: logLevels.alert, args: ['alert'], timestamp: new Date() })
41
- reporter.write({ id, level: logLevels.error, args: ['error'], timestamp: new Date() })
27
+ describe('unit tests', () => {
28
+ beforeEach(() => configForTest())
42
29
 
43
- expect(fakeConsole.errors.length).toBe(4)
30
+ describe('rendering tests', () => {
31
+ test('plain rendering', () => {
32
+ const reporter = createConsoleLogReporter({ formatter: plainLogFormatter });
33
+ ['emergency', 'info', 'warn', 'debug'].forEach(level => {
34
+ reporter.write({ id: 'plain', level: (logLevels as any)[level], args: ['hello', 'world'], timestamp: new Date() })
35
+ })
36
+ })
44
37
  })
45
38
 
46
- test('warn logs are written to console.warn', () => {
47
- const id = 'log'
48
- const reporter = createConsoleLogReporter()
49
-
50
- const fakeConsole = reporter.console = createFakeConsole();
39
+ describe('id', () => {
40
+ test('default is "console"', () => {
41
+ const reporter = createConsoleLogReporter()
42
+ expect(reporter.id).toBe('console')
43
+ })
44
+ test('can be overridden', () => {
45
+ const reporter = createConsoleLogReporter({ id: 'neo-console' })
46
+ expect(reporter.id).toBe('neo-console')
47
+ })
48
+ })
51
49
 
52
- reporter.write({ id, level: logLevels.warn, args: ['warn'], timestamp: new Date() })
50
+ describe('log level', () => {
51
+ test('error, alert, critical and emergency logs are written to console.error', () => {
52
+ const id = 'log'
53
+ const reporter = createConsoleLogReporter()
54
+ const fakeConsole = reporter.console = createFakeConsole()
53
55
 
54
- expect(fakeConsole.warns.length).toBe(1)
55
- })
56
+ reporter.write({ id, level: logLevels.emergency, args: ['emergency'], timestamp: new Date() })
57
+ reporter.write({ id, level: logLevels.critical, args: ['critical'], timestamp: new Date() })
58
+ reporter.write({ id, level: logLevels.alert, args: ['alert'], timestamp: new Date() })
59
+ reporter.write({ id, level: logLevels.error, args: ['error'], timestamp: new Date() })
56
60
 
57
- test('notice and info logs are written to console.info', () => {
58
- const id = 'log'
59
- const reporter = createConsoleLogReporter()
61
+ expect(fakeConsole.errors.length).toBe(4)
62
+ })
60
63
 
61
- const fakeConsole = reporter.console = createFakeConsole();
64
+ test('warn logs are written to console.warn', () => {
65
+ const id = 'log'
66
+ const reporter = createConsoleLogReporter()
62
67
 
63
- reporter.write({ id, level: logLevels.notice, args: ['notice'], timestamp: new Date() })
64
- reporter.write({ id, level: logLevels.info, args: ['info'], timestamp: new Date() })
68
+ const fakeConsole = reporter.console = createFakeConsole()
65
69
 
66
- expect(fakeConsole.infos.length).toBe(2)
67
- })
70
+ reporter.write({ id, level: logLevels.warn, args: ['warn'], timestamp: new Date() })
68
71
 
72
+ expect(fakeConsole.warns.length).toBe(1)
73
+ })
69
74
 
70
- test('debug, trace, and planck logs are written to console.debug', () => {
71
- const id = 'log'
72
- const reporter = createConsoleLogReporter()
73
- const fakeConsole = reporter.console = createFakeConsole();
75
+ test('notice and info logs are written to console.info', () => {
76
+ const id = 'log'
77
+ const reporter = createConsoleLogReporter()
74
78
 
75
- reporter.write({ id, level: logLevels.debug, args: ['debug'], timestamp: new Date() })
76
- reporter.write({ id, level: logLevels.trace, args: ['trace'], timestamp: new Date() })
77
- reporter.write({ id, level: logLevels.planck, args: ['planck'], timestamp: new Date() })
79
+ const fakeConsole = reporter.console = createFakeConsole()
78
80
 
79
- expect(fakeConsole.debugs.length).toBe(3)
80
- })
81
- })
81
+ reporter.write({ id, level: logLevels.notice, args: ['notice'], timestamp: new Date() })
82
+ reporter.write({ id, level: logLevels.info, args: ['info'], timestamp: new Date() })
82
83
 
83
- describe('custom logs', () => {
84
- afterEach(() => clearCustomLogLevel())
84
+ expect(fakeConsole.infos.length).toBe(2)
85
+ })
85
86
 
86
- test('are written according to their log level value', () => {
87
- addCustomLogLevel('high', 50)
88
- addCustomLogLevel('important', 450)
89
- addCustomLogLevel('interest', 650)
90
- addCustomLogLevel('silly', 1000)
91
87
 
92
- const id = 'log'
93
- const reporter = createConsoleLogReporter()
94
- const fakeConsole = reporter.console = createFakeConsole();
88
+ test('debug, trace, and planck logs are written to console.debug', () => {
89
+ const id = 'log'
90
+ const reporter = createConsoleLogReporter()
91
+ const fakeConsole = reporter.console = createFakeConsole()
95
92
 
96
- reporter.write({ id, level: 50, args: ['a'], timestamp: new Date() })
97
- reporter.write({ id, level: 450, args: ['b'], timestamp: new Date() })
98
- reporter.write({ id, level: 650, args: ['c'], timestamp: new Date() })
99
- reporter.write({ id, level: 1000, args: ['d'], timestamp: new Date() })
93
+ reporter.write({ id, level: logLevels.debug, args: ['debug'], timestamp: new Date() })
94
+ reporter.write({ id, level: logLevels.trace, args: ['trace'], timestamp: new Date() })
95
+ reporter.write({ id, level: logLevels.planck, args: ['planck'], timestamp: new Date() })
100
96
 
101
- expect(fakeConsole.errors.length).toBe(1)
102
- expect(fakeConsole.warns.length).toBe(1)
103
- expect(fakeConsole.infos.length).toBe(1)
104
- expect(fakeConsole.debugs.length).toBe(1)
97
+ expect(fakeConsole.debugs.length).toBe(3)
98
+ })
105
99
  })
106
- })
107
100
 
108
- const idFormatter: ConsoleLogFormatter = (entry) => [entry.id]
101
+ describe('custom logs', () => {
102
+ afterEach(() => clearCustomLogLevel())
109
103
 
110
- describe('formatter', () => {
111
- test('use specific formatter', () => {
112
- const id = 'id-only'
113
- const reporter = createConsoleLogReporter({ formatter: idFormatter })
114
- const fakeConsole = reporter.console = createFakeConsole();
104
+ test('are written according to their log level value', () => {
105
+ addCustomLogLevel('high', 50)
106
+ addCustomLogLevel('important', 450)
107
+ addCustomLogLevel('interest', 650)
108
+ addCustomLogLevel('silly', 1000)
115
109
 
116
- reporter.write({ id, level: logLevels.emergency, args: ['emergency'], timestamp: new Date() })
110
+ const id = 'log'
111
+ const reporter = createConsoleLogReporter()
112
+ const fakeConsole = reporter.console = createFakeConsole()
117
113
 
118
- expect(fakeConsole.errors).toEqual([['id-only']])
119
- })
114
+ reporter.write({ id, level: 50, args: ['a'], timestamp: new Date() })
115
+ reporter.write({ id, level: 450, args: ['b'], timestamp: new Date() })
116
+ reporter.write({ id, level: 650, args: ['c'], timestamp: new Date() })
117
+ reporter.write({ id, level: 1000, args: ['d'], timestamp: new Date() })
120
118
 
121
- test('formatter can be changed afterward', () => {
122
- const reporter = createConsoleLogReporter()
123
- const formatter = reporter.formatter
124
- reporter.formatter = idFormatter
125
- expect(reporter.formatter).not.toEqual(formatter)
119
+ expect(fakeConsole.errors.length).toBe(1)
120
+ expect(fakeConsole.warns.length).toBe(1)
121
+ expect(fakeConsole.infos.length).toBe(1)
122
+ expect(fakeConsole.debugs.length).toBe(1)
123
+ })
126
124
  })
127
125
 
128
- test('set formatter during production mode throws', () => {
129
- config({ mode: 'production' })
130
- const reporter = createConsoleLogReporter()
131
- a.throws(() => reporter.formatter = idFormatter, ProhibitedDuringProduction)
132
- })
133
- })
126
+ const idFormatter: ConsoleLogFormatter = (entry) => [entry.id]
134
127
 
135
- describe('filter', () => {
136
- const filter: LogFilter = (entry) => entry.id !== 'secret'
137
- test('use specific filter', () => {
138
- const reporter = createConsoleLogReporter({ formatter: idFormatter, filter })
139
- const fakeConsole = reporter.console = createFakeConsole();
128
+ describe('formatter', () => {
129
+ test('use specific formatter', () => {
130
+ const id = 'id-only'
131
+ const reporter = createConsoleLogReporter({ formatter: idFormatter })
132
+ const fakeConsole = reporter.console = createFakeConsole()
140
133
 
141
- reporter.write({ id: 'normal', level: logLevels.emergency, args: ['emergency'], timestamp: new Date() })
142
- reporter.write({ id: 'secret', level: logLevels.emergency, args: ['emergency'], timestamp: new Date() })
134
+ reporter.write({ id, level: logLevels.emergency, args: ['emergency'], timestamp: new Date() })
143
135
 
144
- expect(fakeConsole.errors).toEqual([['normal']])
145
- })
136
+ expect(fakeConsole.errors).toEqual([['id-only']])
137
+ })
146
138
 
147
- test('can change filter', () => {
148
- const reporter = createConsoleLogReporter()
149
- const filter = reporter.filter
150
- reporter.filter = entry => entry.id !== 'secret'
151
- expect(reporter.filter).not.toEqual(filter)
139
+ test('formatter can be changed afterward', () => {
140
+ const reporter = createConsoleLogReporter()
141
+ const formatter = reporter.formatter
142
+ reporter.formatter = idFormatter
143
+ expect(reporter.formatter).not.toEqual(formatter)
144
+ })
152
145
  })
153
146
 
154
- test('set filter during production mode throws', () => {
155
- config({ mode: 'production' })
156
- const reporter = createConsoleLogReporter()
157
- a.throws(() => { reporter.filter = () => true }, ProhibitedDuringProduction)
147
+ describe('filter', () => {
148
+ const filter: LogFilter = (entry) => entry.id !== 'secret'
149
+ test('use specific filter', () => {
150
+ const reporter = createConsoleLogReporter({ formatter: idFormatter, filter })
151
+ const fakeConsole = reporter.console = createFakeConsole()
152
+
153
+ reporter.write({ id: 'normal', level: logLevels.emergency, args: ['emergency'], timestamp: new Date() })
154
+ reporter.write({ id: 'secret', level: logLevels.emergency, args: ['emergency'], timestamp: new Date() })
155
+
156
+ expect(fakeConsole.errors).toEqual([['normal']])
157
+ })
158
+
159
+ test('can change filter', () => {
160
+ const reporter = createConsoleLogReporter()
161
+ const filter = reporter.filter
162
+ reporter.filter = entry => entry.id !== 'secret'
163
+ expect(reporter.filter).not.toEqual(filter)
164
+ })
158
165
  })
159
- })
160
166
 
161
- test('write log entry with multiple arguments', () => {
162
- const id = 'log'
163
- const reporter = createConsoleLogReporter({ formatter: plainLogFormatter })
164
- const fakeConsole = reporter.console = createFakeConsole();
167
+ test('write log entry with multiple arguments', () => {
168
+ const id = 'log'
169
+ const reporter = createConsoleLogReporter({ formatter: plainLogFormatter })
170
+ const fakeConsole = reporter.console = createFakeConsole()
165
171
 
166
- const entry = { id, level: logLevels.info, args: ['a', 'b', 'c'], timestamp: new Date() }
172
+ const entry = { id, level: logLevels.info, args: ['a', 'b', 'c'], timestamp: new Date() }
167
173
 
168
- reporter.write(entry)
174
+ reporter.write(entry)
169
175
 
170
- expect(fakeConsole.infos).toEqual([
171
- [entry.timestamp.toISOString(), 'log', '(INFO)', 'a', 'b', 'c']
172
- ])
176
+ expect(fakeConsole.infos).toEqual([
177
+ [entry.timestamp.toISOString(), 'log', '(INFO)', 'a', 'b', 'c']
178
+ ])
179
+ })
173
180
  })
174
181
 
182
+
175
183
  function createFakeConsole() {
176
184
  const errors: any[] = []
177
185
  const infos: any[] = []
@@ -380,7 +380,7 @@ test('auto configure', async () => {
380
380
  expect(store.value.configured).toBeFalsy()
381
381
  const log = getLogger('auto config')
382
382
 
383
- log.error('config is called automatically as expected')
383
+ log.info('config is called automatically as expected')
384
384
 
385
385
  await delay(10)
386
386
  expect(store.value.configured).toBeTruthy()
@@ -1,88 +1,99 @@
1
- import a from 'assertron';
2
- import { addLogReporter, clearLogReporters, config, createMemoryLogReporter, getLogReporter, ProhibitedDuringProduction } from '.';
3
- import { store } from './store';
4
- import { createConsoleLogReporter } from './console';
5
- import { LogFilter } from './types';
6
- import { logLevels } from './logLevel';
7
- import { getConsoleReporter, hasConsoleReporter } from './logReporter';
1
+ import a from 'assertron'
2
+ import {
3
+ addLogReporter, clearLogReporters, config,
4
+ createConsoleLogReporter, createMemoryLogReporter,
5
+ getConsoleReporter, getLogReporter, hasConsoleReporter,
6
+ LogFilter, logLevels, ProhibitedDuringProduction
7
+ } from '.'
8
+ import { store } from './store'
8
9
 
9
- beforeEach(() => {
10
- store.reset()
11
- config({ mode: 'test' })
12
- })
10
+ describe('production checks', () => {
11
+ beforeEach(() => store.reset())
13
12
 
14
- describe('addLogReporter()', () => {
15
- test('throws in production mode', () => {
16
- config({ mode: 'production' })
17
- const reporter = createMemoryLogReporter()
18
- a.throws(() => addLogReporter(reporter), ProhibitedDuringProduction)
13
+ describe('addLogReporter()', () => {
14
+ test('throws in production mode', () => {
15
+ config({ mode: 'production' })
16
+ const reporter = createMemoryLogReporter()
17
+ a.throws(() => addLogReporter(reporter), ProhibitedDuringProduction)
18
+ })
19
19
  })
20
20
 
21
- test('adds log reporter', () => {
22
- const count = store.value.reporters.length
23
- const reporter = createMemoryLogReporter()
24
- addLogReporter(reporter)
21
+ describe('clearLogReporters()', () => {
22
+ test('throws in production mode', () => {
23
+ config({ mode: 'production' })
24
+ a.throws(() => clearLogReporters(), ProhibitedDuringProduction)
25
+ })
26
+ })
27
+ })
25
28
 
26
- expect(store.value.reporters.length).toBe(count + 1)
29
+ describe('unit tests', () => {
30
+ beforeEach(() => {
31
+ store.reset()
32
+ config({ mode: 'test' })
27
33
  })
28
34
 
29
- describe('add another console reporter', () => {
30
- test('will not replace existing one', () => {
31
- expect(getLogReporter('console')).toBeDefined()
32
- addLogReporter(createConsoleLogReporter({ id: 'c2' }))
33
- expect(getLogReporter('c2')).toBeUndefined()
34
- expect(getLogReporter('console')).toBeDefined()
35
- })
35
+ describe('addLogReporter()', () => {
36
+ test('adds log reporter', () => {
37
+ const count = store.value.reporters.length
38
+ const reporter = createMemoryLogReporter()
39
+ addLogReporter(reporter)
36
40
 
37
- test('will carry over existing filter', () => {
38
- const filter: LogFilter = entry => entry.level < logLevels.alert
39
- addLogReporter(createConsoleLogReporter({ id: 'c2', filter }))
40
- addLogReporter(createConsoleLogReporter({ id: 'c3' }))
41
- const c3 = getConsoleReporter()!
42
- expect(c3.filter).toBe(filter)
41
+ expect(store.value.reporters.length).toBe(count + 1)
43
42
  })
44
43
 
45
- test('will combine existing filter and new filter', () => {
46
- addLogReporter(createConsoleLogReporter({ id: 'c2', filter: entry => entry.level > logLevels.critical }))
47
- addLogReporter(createConsoleLogReporter({ id: 'c3', filter: entry => entry.level < logLevels.error }))
48
- const c2 = getConsoleReporter()!
49
- expect(c2.filter!({ level: logLevels.info } as any)).toBe(false)
50
- expect(c2.filter!({ level: logLevels.alert } as any)).toBe(false)
51
- })
52
- })
53
- })
44
+ describe('add another console reporter', () => {
45
+ test('will not replace existing one', () => {
46
+ expect(getLogReporter('console')).toBeDefined()
47
+ addLogReporter(createConsoleLogReporter({ id: 'c2' }))
48
+ expect(getLogReporter('c2')).toBeUndefined()
49
+ expect(getLogReporter('console')).toBeDefined()
50
+ })
54
51
 
55
- describe('getLogReporter()', () => {
56
- test('get log reporter by id', () => {
57
- expect(getLogReporter('console')).toBeDefined()
58
- })
52
+ test('will carry over existing filter', () => {
53
+ const filter: LogFilter = entry => entry.level < logLevels.alert
54
+ addLogReporter(createConsoleLogReporter({ id: 'c2', filter }))
55
+ addLogReporter(createConsoleLogReporter({ id: 'c3' }))
56
+ const c3 = getConsoleReporter()!
57
+ expect(c3.filter).toBe(filter)
58
+ })
59
59
 
60
- test('get log reporter with unknown id gets undefined', () => {
61
- expect(getLogReporter('blah')).toBeUndefined()
60
+ test('will combine existing filter and new filter', () => {
61
+ addLogReporter(createConsoleLogReporter({ id: 'c2', filter: entry => entry.level > logLevels.critical }))
62
+ addLogReporter(createConsoleLogReporter({ id: 'c3', filter: entry => entry.level < logLevels.error }))
63
+ const c2 = getConsoleReporter()!
64
+ expect(c2.filter!({ level: logLevels.info } as any)).toBe(false)
65
+ expect(c2.filter!({ level: logLevels.alert } as any)).toBe(false)
66
+ })
67
+ })
62
68
  })
63
- })
64
69
 
65
- describe('clearLogReporters()', () => {
66
- test('throws in production mode', () => {
67
- config({ mode: 'production' })
68
- a.throws(() => clearLogReporters(), ProhibitedDuringProduction)
70
+ describe('getLogReporter()', () => {
71
+ test('get log reporter by id', () => {
72
+ expect(getLogReporter('console')).toBeDefined()
73
+ })
74
+
75
+ test('get log reporter with unknown id gets undefined', () => {
76
+ expect(getLogReporter('blah')).toBeUndefined()
77
+ })
69
78
  })
70
79
 
71
- test('removes all reporters', () => {
72
- clearLogReporters()
80
+ describe('clearLogReporters()', () => {
81
+ test('removes all reporters', () => {
82
+ clearLogReporters()
73
83
 
74
- expect(store.value.reporters.length).toBe(0)
84
+ expect(store.value.reporters.length).toBe(0)
85
+ })
75
86
  })
76
- })
77
87
 
78
- describe('hasConsoleReporter()', () => {
79
- test('returns true if there is a console reporter', () => {
80
- expect(hasConsoleReporter()).toBeTruthy()
81
- })
82
- test('returns false if there is no console reporter', () => {
83
- clearLogReporters()
84
- expect(hasConsoleReporter()).toBeFalsy()
85
- addLogReporter(createMemoryLogReporter())
86
- expect(hasConsoleReporter()).toBeFalsy()
88
+ describe('hasConsoleReporter()', () => {
89
+ test('returns true if there is a console reporter', () => {
90
+ expect(hasConsoleReporter()).toBeTruthy()
91
+ })
92
+ test('returns false if there is no console reporter', () => {
93
+ clearLogReporters()
94
+ expect(hasConsoleReporter()).toBeFalsy()
95
+ addLogReporter(createMemoryLogReporter())
96
+ expect(hasConsoleReporter()).toBeFalsy()
97
+ })
87
98
  })
88
99
  })