Skip to content

Commit 5997043

Browse files
committed
添加单元测试
1 parent 39b01b4 commit 5997043

File tree

2 files changed

+190
-0
lines changed

2 files changed

+190
-0
lines changed

src/logger/index.test.ts

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import { Logger } from './index'
2+
3+
let isCallReport = false
4+
5+
jest.mock('./report-v3', () => ({
6+
reportV3: () => {
7+
isCallReport = true
8+
}
9+
}))
10+
11+
describe('test logger', () => {
12+
const logMessage: unknown[] = []
13+
const warnMessage: unknown[] = []
14+
const errorMessage: unknown[] = []
15+
console.log = jest.fn((...args: unknown[]) => logMessage.push(...args))
16+
console.warn = jest.fn((...args: unknown[]) => warnMessage.push(...args))
17+
console.error = jest.fn((...args: unknown[]) => errorMessage.push(...args))
18+
19+
test('test level', () => {
20+
const infoLogger = new Logger('', true, 'INFO')
21+
infoLogger.info('test1')
22+
expect(logMessage).toStrictEqual([`Qiniu-JS-SDK [INFO][1]: `, 'test1'])
23+
infoLogger.warn('test2')
24+
expect(warnMessage).toStrictEqual(['Qiniu-JS-SDK [WARN][1]: ', 'test2'])
25+
infoLogger.error('test3')
26+
expect(errorMessage).toStrictEqual(['Qiniu-JS-SDK [ERROR][1]: ', 'test3'])
27+
28+
// 清空消息
29+
logMessage.splice(0, logMessage.length)
30+
warnMessage.splice(0, warnMessage.length)
31+
errorMessage.splice(0, errorMessage.length)
32+
33+
const warnLogger = new Logger('', true, 'WARN')
34+
warnLogger.info('test1')
35+
expect(logMessage).toStrictEqual([])
36+
warnLogger.warn('test2')
37+
expect(warnMessage).toStrictEqual(['Qiniu-JS-SDK [WARN][2]: ', 'test2'])
38+
warnLogger.error('test3')
39+
expect(errorMessage).toStrictEqual(['Qiniu-JS-SDK [ERROR][2]: ', 'test3'])
40+
41+
// 清空消息
42+
logMessage.splice(0, logMessage.length)
43+
warnMessage.splice(0, warnMessage.length)
44+
errorMessage.splice(0, errorMessage.length)
45+
46+
const errorLogger = new Logger('', true, 'ERROR')
47+
errorLogger.info('test1')
48+
expect(logMessage).toStrictEqual([])
49+
errorLogger.warn('test2')
50+
expect(warnMessage).toStrictEqual([])
51+
errorLogger.error('test3')
52+
expect(errorMessage).toStrictEqual(['Qiniu-JS-SDK [ERROR][3]: ', 'test3'])
53+
54+
// 清空消息
55+
logMessage.splice(0, logMessage.length)
56+
warnMessage.splice(0, warnMessage.length)
57+
errorMessage.splice(0, errorMessage.length)
58+
59+
const offLogger = new Logger('', true, 'OFF')
60+
offLogger.info('test1')
61+
expect(logMessage).toStrictEqual([])
62+
offLogger.warn('test2')
63+
expect(warnMessage).toStrictEqual([])
64+
offLogger.error('test3')
65+
expect(errorMessage).toStrictEqual([])
66+
})
67+
68+
test('test unique id', () => {
69+
// @ts-ignore
70+
const startId = Logger.id
71+
new Logger('', true, 'OFF')
72+
new Logger('', true, 'OFF')
73+
const last = new Logger('', true, 'OFF')
74+
// @ts-ignore
75+
expect(last.id).toStrictEqual(startId + 3)
76+
})
77+
78+
test('test report', () => {
79+
const logger1 = new Logger('', false, 'OFF')
80+
logger1.report(null as any)
81+
expect(isCallReport).toBeTruthy()
82+
isCallReport = false
83+
const logger2 = new Logger('', true, 'OFF')
84+
logger2.report(null as any)
85+
expect(isCallReport).toBeFalsy()
86+
})
87+
})

src/logger/report-v3.test.ts

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import { reportV3, V3LogInfo } from './report-v3'
2+
3+
class MockXHR {
4+
sendData: string
5+
openData: string[]
6+
openCount: number
7+
headerData: string[]
8+
9+
status: number
10+
readyState: number
11+
onreadystatechange() { }
12+
13+
clear() {
14+
this.sendData = ''
15+
this.openData = []
16+
this.headerData = []
17+
18+
this.status = 0
19+
this.readyState = 0
20+
}
21+
22+
open(...args: string[]) {
23+
this.clear()
24+
this.openCount += 1
25+
this.openData = args
26+
}
27+
28+
send(args: string) {
29+
this.sendData = args
30+
}
31+
32+
setRequestHeader(...args: string[]) {
33+
this.headerData.push(...args)
34+
}
35+
36+
changeStatusAndState(readyState: number, status: number) {
37+
this.status = status
38+
this.readyState = readyState
39+
this.onreadystatechange()
40+
}
41+
}
42+
43+
const mockXHR = new MockXHR()
44+
45+
jest.mock('../utils', () => ({
46+
createXHR: () => (mockXHR),
47+
getAuthHeaders: (t: string) => t
48+
}))
49+
50+
describe('test report-v3', () => {
51+
const testData: V3LogInfo = {
52+
code: 200,
53+
reqId: 'reqId',
54+
host: 'host',
55+
remoteIp: 'remoteIp',
56+
port: 'port',
57+
duration: 1,
58+
time: 1,
59+
bytesSent: 1,
60+
upType: 'jssdk-h5',
61+
size: 1
62+
}
63+
64+
test('test stringify send Data', () => {
65+
reportV3('token', testData, 3)
66+
mockXHR.changeStatusAndState(0, 0)
67+
expect(mockXHR.sendData).toBe([
68+
testData.code || '',
69+
testData.reqId || '',
70+
testData.host || '',
71+
testData.remoteIp || '',
72+
testData.port || '',
73+
testData.duration || '',
74+
testData.time || '',
75+
testData.bytesSent || '',
76+
testData.upType || '',
77+
testData.size || ''
78+
].join(','))
79+
})
80+
81+
test('test retry', () => {
82+
mockXHR.openCount = 0
83+
reportV3('token', testData)
84+
for (let index = 1; index <= 10; index++) {
85+
mockXHR.changeStatusAndState(4, 0)
86+
}
87+
expect(mockXHR.openCount).toBe(4)
88+
89+
mockXHR.openCount = 0
90+
reportV3('token', testData, 4)
91+
for (let index = 1; index < 10; index++) {
92+
mockXHR.changeStatusAndState(4, 0)
93+
}
94+
expect(mockXHR.openCount).toBe(5)
95+
96+
mockXHR.openCount = 0
97+
reportV3('token', testData, 0)
98+
for (let index = 1; index < 10; index++) {
99+
mockXHR.changeStatusAndState(4, 0)
100+
}
101+
expect(mockXHR.openCount).toBe(1)
102+
})
103+
})

0 commit comments

Comments
 (0)