feat: migrate from jest to vitest (#626)

* feat: migrate from jest to vitest

Signed-off-by: Rui Chen <rui@chenrui.dev>

* chore: bump to node 24 and run build

Signed-off-by: Rui Chen <rui@chenrui.dev>

* chore: specify es2022 target for ncc build

Signed-off-by: Rui Chen <rui@chenrui.dev>

---------

Signed-off-by: Rui Chen <rui@chenrui.dev>
This commit is contained in:
Rui Chen 2025-06-09 20:59:28 -04:00 committed by GitHub
parent 8836085300
commit a0e2122208
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 1583 additions and 3287 deletions

1
.gitignore vendored
View file

@ -2,3 +2,4 @@ __tests__/runner/*
# actions requires a node_modules dir https://github.com/actions/toolkit/blob/master/docs/javascript-action.md#publish-a-releasesv1-action
# but its recommended not to check these in https://github.com/actions/toolkit/blob/master/docs/action-versioning.md#recommendations
node_modules
coverage

View file

@ -1 +1 @@
nodejs 20.19.2
nodejs 24.2.0

View file

@ -7,6 +7,8 @@ import {
findTagFromReleases,
} from "../src/github";
import { describe, it } from "vitest";
describe("github", () => {
describe("mimeOrDefault", () => {
it("returns a specific mime for common path", async () => {

View file

@ -10,6 +10,8 @@ import {
} from "../src/util";
import * as assert from "assert";
import { describe, it, expect } from "vitest";
describe("util", () => {
describe("uploadUrl", () => {
it("strips template", () => {

8
dist/index.js vendored

File diff suppressed because one or more lines are too long

View file

@ -1,16 +0,0 @@
import type { JestConfigWithTsJest } from 'ts-jest';
const config: JestConfigWithTsJest = {
preset: 'ts-jest/presets/default-esm',
clearMocks: true,
moduleFileExtensions: ['js', 'ts'],
testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
testRunner: 'jest-circus/runner',
transform: {
'^.+\\.ts$': 'ts-jest',
},
verbose: true,
};
export default config;

4828
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -5,9 +5,10 @@
"description": "GitHub Action for creating GitHub Releases",
"main": "lib/main.js",
"scripts": {
"build": "ncc build src/main.ts --minify",
"build": "ncc build src/main.ts --minify --target es2022",
"build-debug": "ncc build src/main.ts --v8-cache --source-map",
"test": "jest",
"typecheck": "tsc --noEmit",
"test": "vitest --coverage",
"fmt": "prettier --write \"src/**/*.ts\" \"__tests__/**/*.ts\"",
"fmtcheck": "prettier --check \"src/**/*.ts\" \"__tests__/**/*.ts\"",
"updatetag": "git tag -d v2 && git push origin :v2 && git tag -a v2 -m '' && git push origin v2"
@ -30,16 +31,14 @@
},
"devDependencies": {
"@types/glob": "^8.1.0",
"@types/jest": "^29.5.14",
"@types/mime-types": "^3.0.1",
"@types/node": "^22.15.21",
"@vercel/ncc": "^0.38.3",
"jest": "^29.3.1",
"jest-circus": "^29.3.1",
"@vitest/coverage-v8": "^3.1.4",
"prettier": "3.5.3",
"ts-jest": "^29.3.4",
"ts-node": "^10.9.2",
"typescript": "^5.8.3",
"typescript-formatter": "^7.2.2"
"typescript-formatter": "^7.2.2",
"vitest": "^3.1.4"
}
}

View file

@ -3,8 +3,8 @@
"useUnknownInCatchVariables": false,
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
"target": "es2022",
"module": "NodeNext",
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
@ -25,6 +25,7 @@
/* Strict Type-Checking Options */
"strict": true, /* Enable all strict type-checking options. */
"noImplicitAny": false, /* Raise error on expressions and declarations with an implied 'any' type. */
"skipLibCheck": true,
// "strictNullChecks": true, /* Enable strict null checks. */
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
@ -44,7 +45,7 @@
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
"types": ["vitest/globals"],
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
@ -60,5 +61,5 @@
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
},
"exclude": ["node_modules", "**/*.test.ts", "jest.config.ts"]
"exclude": ["node_modules", "**/*.test.ts", "vitest.config.ts"]
}

11
vitest.config.ts Normal file
View file

@ -0,0 +1,11 @@
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
environment: 'node',
coverage: {
reporter: ['text', 'lcov'],
},
include: ['__tests__/**/*.ts'],
},
});