diff --git a/docs/src/mock.md b/docs/src/mock.md index 26b2f0927a..177655adc6 100644 --- a/docs/src/mock.md +++ b/docs/src/mock.md @@ -773,4 +773,42 @@ export default defineConfig({ playwrightMockingProxy ] }); -``` \ No newline at end of file +``` + +#### Nuxt + +```ts +// server/plugins/playwright-mocking-proxy.ts + +import { getGlobalDispatcher, setGlobalDispatcher } from "undici" +import { useEvent, getRequestHeader } from '#imports' + +export default defineNitroPlugin(() => { + if (process.env.NODE_ENV !== 'test') + return; + + const proxiedDispatcher = getGlobalDispatcher().compose(dispatch => (opts, handler) => { + const isInternal = opts.path.startsWith("/__nuxt") + const proxy = getRequestHeader(useEvent(), 'x-playwright-proxy') + if (!proxy || isInternal) + return dispatch(opts, handler) + + const newURL = new URL(decodeURIComponent(proxy) + opts.origin + opts.path); + opts.origin = newURL.origin; + opts.path = newURL.pathname; + return dispatch(opts, handler) + }) + setGlobalDispatcher(proxiedDispatcher) +}); +``` + +```ts +// nuxt.config.ts +export default defineNuxtConfig({ + nitro: { + experimental: { + asyncContext: true, + } + } +}) +```