qiniu-js
Version:
Javascript SDK for Qiniu Resource (Cloud) Storage AP
106 lines (90 loc) • 2.2 kB
text/typescript
import { reportV3, V3LogInfo } from './report-v3'
class MockXHR {
sendData: string
openData: string[]
openCount: number
headerData: string[]
status: number
readyState: number
onreadystatechange() {
// null
}
clear() {
this.sendData = ''
this.openData = []
this.headerData = []
this.status = 0
this.readyState = 0
}
open(...args: string[]) {
this.clear()
this.openCount += 1
this.openData = args
}
send(args: string) {
this.sendData = args
}
setRequestHeader(...args: string[]) {
this.headerData.push(...args)
}
changeStatusAndState(readyState: number, status: number) {
this.status = status
this.readyState = readyState
this.onreadystatechange()
}
}
const mockXHR = new MockXHR()
jest.mock('../utils', () => ({
createXHR: () => mockXHR,
getAuthHeaders: (t: string) => t
}))
describe('test report-v3', () => {
const testData: V3LogInfo = {
code: 200,
reqId: 'reqId',
host: 'host',
remoteIp: 'remoteIp',
port: 'port',
duration: 1,
time: 1,
bytesSent: 1,
upType: 'jssdk-h5',
size: 1
}
test('stringify send Data', () => {
reportV3('token', testData, 3)
mockXHR.changeStatusAndState(0, 0)
expect(mockXHR.sendData).toBe([
testData.code || '',
testData.reqId || '',
testData.host || '',
testData.remoteIp || '',
testData.port || '',
testData.duration || '',
testData.time || '',
testData.bytesSent || '',
testData.upType || '',
testData.size || ''
].join(','))
})
test('retry', () => {
mockXHR.openCount = 0
reportV3('token', testData)
for (let index = 1; index <= 10; index++) {
mockXHR.changeStatusAndState(4, 0)
}
expect(mockXHR.openCount).toBe(4)
mockXHR.openCount = 0
reportV3('token', testData, 4)
for (let index = 1; index < 10; index++) {
mockXHR.changeStatusAndState(4, 0)
}
expect(mockXHR.openCount).toBe(5)
mockXHR.openCount = 0
reportV3('token', testData, 0)
for (let index = 1; index < 10; index++) {
mockXHR.changeStatusAndState(4, 0)
}
expect(mockXHR.openCount).toBe(1)
})
})