|
1 | 1 | import { channel } from '@vitest/browser/client' |
2 | 2 | import type { |
3 | 3 | IframeChannelEvent, |
| 4 | + IframeMockFactoryRequestEvent, |
4 | 5 | IframeMockingDoneEvent, |
5 | 6 | } from '@vitest/browser/client' |
6 | 7 | import type { MockedModuleSerialized } from '@vitest/mocker' |
7 | 8 | import { ManualMockedModule } from '@vitest/mocker' |
8 | 9 | import { ModuleMockerMSWInterceptor } from '@vitest/mocker/browser' |
| 10 | +import { nanoid } from '@vitest/utils' |
9 | 11 |
|
10 | 12 | export class VitestBrowserModuleMockerInterceptor extends ModuleMockerMSWInterceptor { |
11 | 13 | override async register(event: MockedModuleSerialized): Promise<void> { |
@@ -42,19 +44,21 @@ export function createModuleMockerInterceptor() { |
42 | 44 | } |
43 | 45 |
|
44 | 46 | function getFactoryExports(id: string) { |
| 47 | + const eventId = nanoid() |
45 | 48 | channel.postMessage({ |
46 | 49 | type: 'mock-factory:request', |
| 50 | + eventId, |
47 | 51 | id, |
48 | | - }) |
| 52 | + } satisfies IframeMockFactoryRequestEvent) |
49 | 53 | return new Promise<string[]>((resolve, reject) => { |
50 | 54 | channel.addEventListener( |
51 | 55 | 'message', |
52 | 56 | function onMessage(e: MessageEvent<IframeChannelEvent>) { |
53 | | - if (e.data.type === 'mock-factory:response') { |
| 57 | + if (e.data.type === 'mock-factory:response' && e.data.eventId === eventId) { |
54 | 58 | resolve(e.data.exports) |
55 | 59 | channel.removeEventListener('message', onMessage) |
56 | 60 | } |
57 | | - if (e.data.type === 'mock-factory:error') { |
| 61 | + if (e.data.type === 'mock-factory:error' && e.data.eventId === eventId) { |
58 | 62 | reject(e.data.error) |
59 | 63 | channel.removeEventListener('message', onMessage) |
60 | 64 | } |
|
0 commit comments