Skip to content

Commit

Permalink
feat: do not interfere with shared workers (#1448)
Browse files Browse the repository at this point in the history
* feat: add support for shared workers

* test: touch-up shared worker test

* test: rename the shared worker test

Co-authored-by: Artem Zakharchenko <kettanaito@gmail.com>
  • Loading branch information
mucsi96 and kettanaito committed Nov 7, 2022
1 parent 41798eb commit 670dda7
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/mockServiceWorker.js
Expand Up @@ -174,7 +174,7 @@ async function handleRequest(event, requestId) {
async function resolveMainClient(event) {
const client = await self.clients.get(event.clientId)

if (client.frameType === 'top-level') {
if (client?.frameType === 'top-level') {
return client
}

Expand Down
@@ -0,0 +1,5 @@
import { setupWorker } from 'msw'

const worker = setupWorker()

worker.start()
@@ -0,0 +1,33 @@
import * as path from 'path'
import { pageWith } from 'page-with'
import { waitFor } from '../../../../support/waitFor'

function createRuntime() {
return pageWith({
example: path.resolve(__dirname, 'shared-worker.mocks.ts'),
contentBase: path.resolve(__dirname),
})
}

test('does not interfere with a shared worker', async () => {
const { page, consoleSpy } = await createRuntime()

await page.evaluate(() => {
const worker = new SharedWorker('/worker.js')

worker.addEventListener('error', () =>
console.error('There is an error with worker'),
)

worker.port.onmessage = (event) => {
console.log(event.data)
}

worker.port.postMessage('john')
})

await waitFor(() => {
expect(consoleSpy.get('error')).toBeUndefined()
expect(consoleSpy.get('log')).toContain('hello, john')
})
})
7 changes: 7 additions & 0 deletions test/msw-api/setup-worker/scenarios/shared-worker/worker.js
@@ -0,0 +1,7 @@
onconnect = (event) => {
const port = event.ports[0]

port.onmessage = (event) => {
port.postMessage(`hello, ${event.data}`)
}
}

0 comments on commit 670dda7

Please sign in to comment.