1

I am migrating a React application from craco/Jest to Vite/Vitest The application also used AntDesign and before the test was running flawlessy. React version is 18.20 . NB we are trying to also mock some objects

I get this error when running the tests:

Error: Uncaught [SyntaxError: ':scope +.ant-select-item-option-selected:not(.ant-select-item-option-disabled))+.ant-select-item-option-selected:not(.ant-select-item-option-disabled' is not a valid selector]
    at reportException (/auto/local_build/dhws140/disk1/FLOW/flow-prototype/nconect.flow.b2c.app/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:66:24)
    at innerInvokeEventListeners (/auto/local_build/dhws140/disk1/FLOW/flow-prototype/nconect.flow.b2c.app/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:353:9)
    at invokeEventListeners (/auto/local_build/dhws140/disk1/FLOW/flow-prototype/nconect.flow.b2c.app/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3)
    at HTMLUnknownElementImpl._dispatch (/auto/local_build/dhws140/disk1/FLOW/flow-prototype/nconect.flow.b2c.app/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9)
    at HTMLUnknownElementImpl.dispatchEvent (/auto/local_build/dhws140/disk1/FLOW/flow-prototype/nconect.flow.b2c.app/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17)
    at HTMLUnknownElement.dispatchEvent (/auto/local_build/dhws140/disk1/FLOW/flow-prototype/nconect.flow.b2c.app/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
    at Object.invokeGuardedCallbackDev (/auto/local_build/dhws140/disk1/FLOW/flow-prototype/nconect.flow.b2c.app/node_modules/react-dom/cjs/react-dom.development.js:4213:16)
    at invokeGuardedCallback (/auto/local_build/dhws140/disk1/FLOW/flow-prototype/nconect.flow.b2c.app/node_modules/react-dom/cjs/react-dom.development.js:4277:31)
    at reportUncaughtErrorInDEV (/auto/local_build/dhws140/disk1/FLOW/flow-prototype/nconect.flow.b2c.app/node_modules/react-dom/cjs/react-dom.development.js:22877:5)
    at captureCommitPhaseError (/auto/local_build/dhws140/disk1/FLOW/flow-prototype/nconect.flow.b2c.app/node_modules/react-dom/cjs/react-dom.development.js:27165:5) DOMException {}

this is my vute.config.ts

/// <reference types="vitest" />
import { defineConfig, transformWithEsbuild } from 'vite'
import 'vitest/config'
import react from '@vitejs/plugin-react'
import viteTsconfigPaths from 'vite-tsconfig-paths'
import svgr from 'vite-plugin-svgr'
import checker from 'vite-plugin-checker'
import commonjs from 'vite-plugin-commonjs'

export default defineConfig({
    build: {
      rollupOptions: {
        external: ['react', /^react\/.*/, 'react-dom', /react-dom\/.*/],
      }
    },
  css: {
    preprocessorOptions: {
      less: {
        additionalData: '@root-entry-name: default;',
        javascriptEnabled: true,
      },
    },
  },
  plugins: [
    {
      name: 'treat-js-files-as-jsx',
      async transform (code, id) {
        if (!id.match(/src\/.*\.js$/)) return null

        // Use the exposed transform from vite, instead of directly
        // transforming with esbuild
        return transformWithEsbuild(code, id, {
          jsx: 'automatic',
          loader: 'jsx',
        })
      },
    },
    commonjs(),
    react(),
    viteTsconfigPaths(),
    svgr({ svgrOptions: { typescript: true } }),
    checker({ typescript: true })],
  test: {
    coverage: {
      exclude: [],
      include: ['src/**/*'],
      reporter: ['text', 'json', 'html'],
    },
    css: true,
    environment: 'jsdom',
    globals: true,
    reporters: ['verbose'],
    setupFiles: './src/setupTests.ts',
  }
  }
)

1 Answer 1

1

This is a 'bug' with the css selector library nwsapi that is used by jsdom, see:

The solution is to pin that library to the version 2.2.13.

Add to your package.json:

{
   ...
   "devDependencies": {
       ...
       "nwsapi": "2.2.13"
   },
   // for npm
   "overrides": {
       "nwsapi": "2.2.13"
   },
   // for yarn
   "resolutions": {
       "nwsapi": "2.2.13"
    }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.