vitest-dev/vitest · error · Error

The "preview" provider doesn't support…

Error message

The "preview" provider doesn't support 'userEvent.dragAndDrop'

What it means

Vitest's built-in preview user-event provider (the default, lightweight DOM-event-based provider) deliberately omits dragAndDrop because true drag-and-drop requires richer input simulation than the preview provider offers. The dragAndDrop method is stubbed to throw immediately so users discover the limitation rather than get silent no-ops. To use dragAndDrop you must switch to the Playwright or WebDriverIO browser provider.

Solutions

  1. Set tester.provider to 'playwright' (or 'webdriverio') in vitest.config under test.browser, and install @vitest/browser-provider-playwright.
  2. Replace the dragAndDrop call with a manual sequence of pointer events via dispatchEvent on the preview provider, if you must stay on preview.
  3. Confirm the provider is actually applied by logging getBrowserState().provider in a test.

Example fix

// before (vitest.config.ts)
export default defineConfig({ test: { browser: { enabled: true, provider: 'preview' } } })
// after
export default defineConfig({ test: { browser: { enabled: true, provider: 'playwright' } } })
Defensive patterns

Strategy: validation

Validate before calling

const provider = getBrowserState().provider
if (provider === 'preview' && typeof page.userEvent.dragAndDrop === 'function') {
  // will throw — pick a different approach
  await dispatchDragSequence(source, target)
} else {
  await page.userEvent.dragAndDrop(source, target)
}

Type guard

function supportsDragAndDrop(): boolean {
  return getBrowserState().provider !== 'preview'
}

Prevention

When it happens

Trigger: Calling await page.userEvent.dragAndDrop(source, target) (or expect.dragAndDrop) while browser.provider is 'preview' (the default). Running browser tests with @vitest/browser without configuring provider: 'playwright' or provider: 'webdriverio'.

Common situations: Default Vitest browser config that does not set a provider; copying example code from docs that assumes a full provider; CI where only the preview provider is installed; upgrading from a version where the call silently failed.

Related errors


AI-assisted analysis of vitest-dev/vitest@1fa9837ec2 (2026-08-11). Data as JSON: /api/errors/6c9a9d1f1f8b05a2. Report an issue: GitHub.

Appendix: source

Thrown at packages/browser/src/client/tester/context.ts:225

          basename: string
          mime: string
        }>('__vitest_fileInfo', [file, 'base64'])

        const fileInstance = fetch(`data:${mime};base64,${base64}`)
          .then(r => r.blob())
          .then(blob => new File([blob], basename, { type: mime }))
        return fileInstance
      })
      const uploadFiles = await Promise.all(uploadPromise)
      return userEvent.upload(toElement(element) as HTMLElement, uploadFiles)
    },

    async fill(element, text) {
      await userEvent.clear(toElement(element))
      return userEvent.type(toElement(element), text)
    },
    async dragAndDrop() {
      throw new Error(`The "preview" provider doesn't support 'userEvent.dragAndDrop'`)
    },

    async type(element, text, options) {
      await userEvent.type(toElement(element), text, options)
    },
    async tab(options) {
      await userEvent.tab(options)
    },
    async keyboard(text: string) {
      await userEvent.keyboard(text)
    },

    async copy() {
      clipboardData = await userEvent.copy()
    },
    async cut() {
      clipboardData = await userEvent.cut()
    },

View on GitHub (pinned to 1fa9837ec2)