|
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