Parcourir la source

workflow: complete migration from jest to vitest

Evan You il y a 3 ans
Parent
commit
28b95daa70
10 fichiers modifiés avec 107 ajouts et 864 suppressions
  1. 0 67
      jest.config.js
  2. 6 9
      package.json
  3. 1 0
      packages/vue/src/dev.ts
  4. 66 665
      pnpm-lock.yaml
  5. 0 18
      scripts/filter-e2e.js
  6. 0 10
      scripts/filter-unit.js
  7. 0 92
      scripts/setupJestEnv.ts
  8. 14 3
      vitest.config.ts
  9. 10 0
      vitest.e2e.config.ts
  10. 10 0
      vitest.unit.config.ts

+ 0 - 67
jest.config.js

@@ -1,67 +0,0 @@
-module.exports = {
-  testEnvironment: 'jsdom',
-  preset: 'ts-jest',
-  setupFilesAfterEnv: ['./scripts/setupJestEnv.ts'],
-  transform: {
-    '^.+\\.tsx?$': [
-      'ts-jest',
-      {
-        tsconfig: {
-          target: 'esnext',
-          sourceMap: true
-        }
-      }
-    ]
-  },
-  globals: {
-    __DEV__: true,
-    __TEST__: true,
-    __VERSION__: require('./package.json').version,
-    __BROWSER__: false,
-    __GLOBAL__: false,
-    __ESM_BUNDLER__: true,
-    __ESM_BROWSER__: false,
-    __NODE_JS__: true,
-    __SSR__: true,
-    __FEATURE_OPTIONS_API__: true,
-    __FEATURE_SUSPENSE__: true,
-    __FEATURE_PROD_DEVTOOLS__: false,
-    __COMPAT__: true
-  },
-  coverageDirectory: 'coverage',
-  coverageReporters: ['html', 'lcov', 'text'],
-  collectCoverageFrom: [
-    'packages/*/src/**/*.ts',
-    '!packages/runtime-test/src/utils/**',
-    '!packages/template-explorer/**',
-    '!packages/sfc-playground/**',
-    '!packages/size-check/**',
-    '!packages/runtime-core/src/profiling.ts',
-    '!packages/runtime-core/src/customFormatter.ts',
-    // DOM transitions are tested via e2e so no coverage is collected
-    '!packages/runtime-dom/src/components/Transition*',
-    // only called in browsers
-    '!packages/vue/src/devCheck.ts',
-    // only used as a build entry
-    '!packages/vue/src/runtime.ts',
-    // mostly just entries
-    '!packages/vue-compat/**'
-  ],
-  watchPathIgnorePatterns: ['/node_modules/', '/dist/', '/.git/'],
-  moduleFileExtensions: ['ts', 'tsx', 'js', 'json'],
-  moduleNameMapper: {
-    '@vue/consolidate': '@vue/consolidate',
-    '@vue/compat': '<rootDir>/packages/vue-compat/src',
-    '^@vue/(.*?)$': '<rootDir>/packages/$1/src',
-    'vue/compiler-sfc': '<rootDir>/packages/compiler-sfc/src',
-    'vue/server-renderer': '<rootDir>/packages/server-renderer/src',
-    vue: '<rootDir>/packages/vue/src'
-  },
-  rootDir: __dirname,
-  testMatch: ['<rootDir>/packages/**/__tests__/**/*spec.[jt]s?(x)'],
-  testPathIgnorePatterns: process.env.SKIP_E2E
-    ? // ignore example tests on netlify builds since they don't contribute
-      // to coverage and can cause netlify builds to fail
-      ['/node_modules/', '/examples/__tests__']
-    : ['/node_modules/']
-}

+ 6 - 9
package.json

@@ -11,12 +11,12 @@
     "lint": "eslint --cache --ext .ts packages/*/{src,__tests__}/**.ts",
     "format": "prettier --write --cache --parser typescript \"**/*.[tj]s?(x)\"",
     "format-check": "prettier --check --cache --parser typescript \"**/*.[tj]s?(x)\"",
-    "test": "run-s \"test-unit {@}\" \"test-e2e {@}\"",
-    "test-unit": "jest --filter ./scripts/filter-unit.mjs",
-    "test-e2e": "node scripts/build.mjs vue -f global -d && jest --filter ./scripts/filter-e2e.js --runInBand",
+    "test": "vitest",
+    "test-unit": "vitest -c vitest.unit.config.ts",
+    "test-e2e": "node scripts/build.mjs vue -f global -d && vitest -c vitest.e2e.config.ts",
     "test-dts": "node scripts/build.mjs shared reactivity runtime-core runtime-dom -dt -f esm-bundler && npm run test-dts-only",
     "test-dts-only": "tsc -p ./test-dts/tsconfig.json && tsc -p ./test-dts/tsconfig.build.mjson",
-    "test-coverage": "node scripts/build.mjs vue -f global -d && jest --runInBand --coverage --bail",
+    "test-coverage": "vitest -c vitest.unit.config.ts --coverage",
     "release": "node scripts/release.mjs",
     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
     "dev-esm": "node scripts/dev.mjs -if esm-bundler-runtime",
@@ -62,9 +62,9 @@
     "@rollup/plugin-replace": "^5.0.1",
     "@rollup/plugin-terser": "^0.1.0",
     "@types/hash-sum": "^1.0.0",
-    "@types/jest": "^29.2.2",
     "@types/node": "^16.4.7",
     "@typescript-eslint/parser": "^5.23.0",
+    "@vitest/coverage-istanbul": "^0.28.2",
     "@vue/consolidate": "0.17.3",
     "@vue/reactivity": "workspace:*",
     "@vue/runtime-core": "workspace:*",
@@ -76,10 +76,8 @@
     "enquirer": "^2.3.2",
     "esbuild": "^0.17.4",
     "eslint": "^7.7.0",
-    "eslint-plugin-jest": "26.1.5",
+    "eslint-plugin-jest": "^27.2.1",
     "execa": "^4.0.2",
-    "jest": "^29.3.1",
-    "jest-environment-jsdom": "^29.3.1",
     "lint-staged": "^10.2.10",
     "lodash": "^4.17.15",
     "marked": "^4.0.10",
@@ -98,7 +96,6 @@
     "simple-git-hooks": "^2.8.1",
     "terser": "^5.15.1",
     "todomvc-app-css": "^2.3.0",
-    "ts-jest": "^29.0.3",
     "tslib": "^2.4.0",
     "typescript": "^4.8.0",
     "vite": "^4.0.4",

+ 1 - 0
packages/vue/src/dev.ts

@@ -2,6 +2,7 @@ import { initCustomFormatter } from '@vue/runtime-dom'
 
 export function initDev() {
   if (__BROWSER__) {
+    /* istanbul ignore if */
     if (!__ESM_BUNDLER__) {
       console.info(
         `You are running a development build of Vue.\n` +

Fichier diff supprimé car celui-ci est trop grand
+ 66 - 665
pnpm-lock.yaml


+ 0 - 18
scripts/filter-e2e.js

@@ -1,18 +0,0 @@
-// jest only supports cjs filter files
-const path = require('path')
-
-const e2eTests = [
-  'vue/__tests__/Transition',
-  'vue/__tests__/TransitionGroup',
-  'vue/examples/'
-]
-
-module.exports = list => {
-  return {
-    filtered: list
-      .filter(t => e2eTests.some(tt => t.includes(path.normalize(tt))))
-      .map(test => ({ test }))
-  }
-}
-
-module.exports.e2eTests = e2eTests

+ 0 - 10
scripts/filter-unit.js

@@ -1,10 +0,0 @@
-// jest only supports cjs filter files
-const { e2eTests } = require('./filter-e2e')
-
-module.exports = list => {
-  return {
-    filtered: list
-      .filter(t => !e2eTests.some(tt => t.includes(tt)))
-      .map(test => ({ test }))
-  }
-}

+ 0 - 92
scripts/setupJestEnv.ts

@@ -1,92 +0,0 @@
-expect.extend({
-  toHaveBeenWarned(received: string) {
-    asserted.add(received)
-    const passed = warn.mock.calls.some(args => args[0].includes(received))
-    if (passed) {
-      return {
-        pass: true,
-        message: () => `expected "${received}" not to have been warned.`
-      }
-    } else {
-      const msgs = warn.mock.calls.map(args => args[0]).join('\n - ')
-      return {
-        pass: false,
-        message: () =>
-          `expected "${received}" to have been warned` +
-          (msgs.length
-            ? `.\n\nActual messages:\n\n - ${msgs}`
-            : ` but no warning was recorded.`)
-      }
-    }
-  },
-
-  toHaveBeenWarnedLast(received: string) {
-    asserted.add(received)
-    const passed =
-      warn.mock.calls[warn.mock.calls.length - 1][0].includes(received)
-    if (passed) {
-      return {
-        pass: true,
-        message: () => `expected "${received}" not to have been warned last.`
-      }
-    } else {
-      const msgs = warn.mock.calls.map(args => args[0]).join('\n - ')
-      return {
-        pass: false,
-        message: () =>
-          `expected "${received}" to have been warned last.\n\nActual messages:\n\n - ${msgs}`
-      }
-    }
-  },
-
-  toHaveBeenWarnedTimes(received: string, n: number) {
-    asserted.add(received)
-    let found = 0
-    warn.mock.calls.forEach(args => {
-      if (args[0].includes(received)) {
-        found++
-      }
-    })
-
-    if (found === n) {
-      return {
-        pass: true,
-        message: () => `expected "${received}" to have been warned ${n} times.`
-      }
-    } else {
-      return {
-        pass: false,
-        message: () =>
-          `expected "${received}" to have been warned ${n} times but got ${found}.`
-      }
-    }
-  }
-})
-
-let warn: jest.SpyInstance
-const asserted: Set<string> = new Set()
-
-beforeEach(() => {
-  asserted.clear()
-  warn = jest.spyOn(console, 'warn')
-  warn.mockImplementation(() => {})
-})
-
-afterEach(() => {
-  const assertedArray = Array.from(asserted)
-  const nonAssertedWarnings = warn.mock.calls
-    .map(args => args[0])
-    .filter(received => {
-      return !assertedArray.some(assertedMsg => {
-        return received.includes(assertedMsg)
-      })
-    })
-  warn.mockRestore()
-  if (nonAssertedWarnings.length) {
-    throw new Error(
-      `test case threw unexpected warnings:\n - ${nonAssertedWarnings.join(
-        '\n - '
-      )}`
-    )
-  }
-})

+ 14 - 3
vitest.config.ts

@@ -1,4 +1,4 @@
-import { defineConfig } from 'vitest/config'
+import { configDefaults, defineConfig, UserConfig } from 'vitest/config'
 import path from 'node:path'
 import { fileURLToPath } from 'node:url'
 import { readdirSync } from 'node:fs'
@@ -45,6 +45,17 @@ export default defineConfig({
     setupFiles: 'scripts/setupVitest.ts',
     environmentMatchGlobs: [
       ['packages/{vue,vue-compat,runtime-dom}/**', 'jsdom']
-    ]
+    ],
+    coverage: {
+      provider: 'istanbul',
+      reporter: ['text', 'html'],
+      exclude: [
+        ...configDefaults.coverage.exclude!,
+        // DOM transitions are tested via e2e so no coverage is collected
+        'packages/runtime-dom/src/components/Transition*',
+        // mostly entries
+        'packages/vue-compat/**'
+      ]
+    }
   }
-})
+}) as UserConfig

+ 10 - 0
vitest.e2e.config.ts

@@ -0,0 +1,10 @@
+import { UserConfig, configDefaults } from 'vitest/config'
+import config from './vitest.config'
+
+export default {
+  ...config,
+  test: {
+    ...config.test,
+    include: ['packages/vue/__tests__/e2e/*.spec.ts']
+  }
+} as UserConfig

+ 10 - 0
vitest.unit.config.ts

@@ -0,0 +1,10 @@
+import { UserConfig, configDefaults } from 'vitest/config'
+import config from './vitest.config'
+
+export default {
+  ...config,
+  test: {
+    ...config.test,
+    exclude: [...configDefaults.exclude, '**/e2e/**']
+  }
+} as UserConfig

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff