{"id":"6c9a9d1f1f8b05a2","repo":"vitest-dev/vitest","slug":"the-preview-provider-doesn-t-support-userevent","errorCode":null,"errorMessage":"The \"preview\" provider doesn't support 'userEvent.dragAndDrop'","messagePattern":"The \"preview\" provider doesn't support 'userEvent\\.dragAndDrop'","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/browser/src/client/tester/context.ts","lineNumber":225,"sourceCode":"          basename: string\n          mime: string\n        }>('__vitest_fileInfo', [file, 'base64'])\n\n        const fileInstance = fetch(`data:${mime};base64,${base64}`)\n          .then(r => r.blob())\n          .then(blob => new File([blob], basename, { type: mime }))\n        return fileInstance\n      })\n      const uploadFiles = await Promise.all(uploadPromise)\n      return userEvent.upload(toElement(element) as HTMLElement, uploadFiles)\n    },\n\n    async fill(element, text) {\n      await userEvent.clear(toElement(element))\n      return userEvent.type(toElement(element), text)\n    },\n    async dragAndDrop() {\n      throw new Error(`The \"preview\" provider doesn't support 'userEvent.dragAndDrop'`)\n    },\n\n    async type(element, text, options) {\n      await userEvent.type(toElement(element), text, options)\n    },\n    async tab(options) {\n      await userEvent.tab(options)\n    },\n    async keyboard(text: string) {\n      await userEvent.keyboard(text)\n    },\n\n    async copy() {\n      clipboardData = await userEvent.copy()\n    },\n    async cut() {\n      clipboardData = await userEvent.cut()\n    },","sourceCodeStart":207,"sourceCodeEnd":243,"githubUrl":"https://github.com/vitest-dev/vitest/blob/d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09/packages/browser/src/client/tester/context.ts#L207-L243","documentation":"The preview browser provider (the in-iframe, testing-library-based provider created via createPreviewUserEvent at packages/browser/src/client/tester/context.ts:188) does not implement dragAndDrop — its implementation is a hard throw. The preview provider simulates user events with @testing-library/user-event inside the same iframe, which has no native drag-and-drop primitive, unlike the playwright/webdriverio providers that delegate to real browser drag APIs.","triggerScenarios":"Configuring browser provider as 'preview' (or using the default preview UI) and calling userEvent.dragAndDrop(source, target) in a browser test. The throw is unconditional for the preview user event instance (context.ts:224-226).","commonSituations":"Teams defaulting to the preview provider for speed/dev-loop then writing drag-and-drop tests; component tests that need DnD; CI configs that switched provider without updating affected tests.","solutions":["Switch the browser provider to 'playwright' or 'webdriverio' in vitest config: browser.provider = 'playwright' — these implement dragAndDrop via native browser APIs.","If you must stay on preview, replace dragAndDrop with manual pointer event simulation (dispatchEvent dragstart/dragover/drop) or skip the test with it.skip/if the provider is preview.","Gate the test: if (browserProvider !== 'preview') { ... dragAndDrop ... }."],"exampleFix":"// before\n// vitest.config.ts: browser.provider = 'preview'\nawait userEvent.dragAndDrop(source, target)\n// after\n// vitest.config.ts:\n//   test: { browser: { provider: 'playwright' } }\nawait userEvent.dragAndDrop(source, target)","handlingStrategy":"validation","validationCode":"import { server } from 'vitest/browser'\nconst provider = server.config.browser.provider\nif (provider !== 'preview') {\n  await userEvent.dragAndDrop(source, target)\n} else {\n  // skip or manual pointer simulation\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Check the configured provider before writing drag-and-drop browser tests.","Standardize on 'playwright' or 'webdriverio' when DnD interactions are required."],"tags":["browser","user-event","preview-provider","drag-and-drop","unsupported"],"analyzedSha":"d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09","analyzedAt":"2026-08-03T20:23:56.861Z","schemaVersion":2}