Skip to content

Commit 55f9645

Browse files
committed
chore: update websocket test
1 parent 4a94356 commit 55f9645

1 file changed

Lines changed: 23 additions & 17 deletions

File tree

‎packages/api-e2e/test/specs/websocket.spec.ts‎

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,21 @@ describePlugin('websocket', () => {
2626
const messages = await tauri(async (api, url) => {
2727
const ws = await api.websocket.connect(url)
2828
const received: Message[] = []
29-
await new Promise<void>((resolve, reject) => {
29+
// a copy taken once the echoes are in: the close acknowledgement that
30+
// `disconnect` triggers may arrive before this function returns
31+
const echoes = await new Promise<Message[]>((resolve, reject) => {
3032
setTimeout(() => reject(new Error('echo not received')), 5000)
3133
ws.addListener((message) => {
3234
received.push(message)
33-
if (received.length === 3) resolve()
35+
if (received.length === 3) resolve(received.slice())
3436
})
3537
ws.send('hello')
3638
.then(() => ws.send([1, 2, 3]))
3739
.then(() => ws.send({ type: 'Text', data: 'explicit' }))
3840
.catch(reject)
3941
})
4042
await ws.disconnect()
41-
return received
43+
return echoes
4244
}, WEBSOCKET_FIXTURE_URL)
4345
expect(messages).toEqual([
4446
{ type: 'Text', data: 'hello' },
@@ -84,21 +86,25 @@ describePlugin('websocket', () => {
8486
let removed = 0
8587
let kept = 0
8688
const remove = ws.addListener(() => removed++)
87-
await new Promise<void>((resolve, reject) => {
88-
setTimeout(() => reject(new Error('echoes not received')), 5000)
89-
ws.addListener(() => {
90-
kept++
91-
if (kept === 1) {
92-
remove()
93-
ws.send('second').catch(reject)
94-
} else {
95-
resolve()
96-
}
97-
})
98-
ws.send('first').catch(reject)
99-
})
89+
// counted once both echoes are in, before `disconnect`'s close
90+
// acknowledgement can reach the listener still attached
91+
const counts = await new Promise<{ removed: number; kept: number }>(
92+
(resolve, reject) => {
93+
setTimeout(() => reject(new Error('echoes not received')), 5000)
94+
ws.addListener(() => {
95+
kept++
96+
if (kept === 1) {
97+
remove()
98+
ws.send('second').catch(reject)
99+
} else {
100+
resolve({ removed, kept })
101+
}
102+
})
103+
ws.send('first').catch(reject)
104+
}
105+
)
100106
await ws.disconnect()
101-
return { removed, kept }
107+
return counts
102108
}, WEBSOCKET_FIXTURE_URL)
103109
expect(counts).toEqual({ removed: 1, kept: 2 })
104110
})

0 commit comments

Comments
 (0)