32 lines
987 B
TypeScript
32 lines
987 B
TypeScript
// @vitest-environment happy-dom
|
|
import { afterEach, expect, it, vi } from 'vitest'
|
|
import { connectEvents } from './events'
|
|
|
|
afterEach(() => { vi.useRealTimers(); vi.unstubAllGlobals() })
|
|
|
|
it('首次连接和重连均补同步,停止后不再连接', () => {
|
|
vi.useFakeTimers()
|
|
class Socket {
|
|
static CLOSED = 3
|
|
static instances: Socket[] = []
|
|
readyState = 0
|
|
onopen?: () => void
|
|
onclose?: () => void
|
|
close() { this.readyState = Socket.CLOSED }
|
|
constructor() { Socket.instances.push(this) }
|
|
}
|
|
vi.stubGlobal('WebSocket', Socket)
|
|
let synchronized = 0
|
|
const stop = connectEvents({ onEvents: () => {}, onResync: () => { synchronized++ } })
|
|
Socket.instances[0].onopen!()
|
|
expect(synchronized).toBe(1)
|
|
Socket.instances[0].onclose!()
|
|
vi.advanceTimersByTime(1000)
|
|
Socket.instances[1].onopen!()
|
|
expect(synchronized).toBe(2)
|
|
stop()
|
|
Socket.instances[1].onclose!()
|
|
vi.advanceTimersByTime(30000)
|
|
expect(Socket.instances).toHaveLength(2)
|
|
})
|