platform-codebase/@packages/@testing/msw-handlers/src/setup/browser.ts

59 lines
1.5 KiB
TypeScript
Executable file

import { setupWorker } from 'msw/browser'
import { websiteStore } from '../data/websites'
import { handlers } from '../handlers'
/**
* Browser MSW Setup
*
* Initializes MSW service worker for browser-based mocking.
* Used in development mode and E2E tests.
*/
export const worker = setupWorker(...handlers)
// Expose store on window for E2E test access
if (typeof window !== 'undefined') {
(window as Window & { __mswWebsiteStore?: typeof websiteStore }).__mswWebsiteStore = websiteStore
}
/**
* Initialize MSW in the browser
*
* Should be called before rendering the app:
* ```ts
* if (import.meta.env.VITE_ENABLE_MSW === 'true') {
* await setupMSW()
* }
* ```
*/
export async function setupMSW() {
try {
await worker.start({
onUnhandledRequest: 'bypass',
serviceWorker: {
url: '/mockServiceWorker.js',
},
})
// eslint-disable-next-line no-console -- Intentional dev log for MSW setup visibility
console.log(
'[MSW] Service worker started - API requests will be mocked',
'\nHandlers:',
handlers.length,
'registered'
)
} catch (error) {
// eslint-disable-next-line no-console -- Critical error log for MSW setup failures
console.error('[MSW] Failed to start service worker:', error)
}
}
/**
* Stop MSW service worker
*/
export async function stopMSW() {
await worker.stop()
// eslint-disable-next-line no-console -- Intentional dev log for MSW teardown visibility
console.log('[MSW] Service worker stopped')
}