Skip to content

Commit 243d862

Browse files
authored
refactor: migrate from jest to vitest (#812)
1 parent a797db3 commit 243d862

File tree

11 files changed

+1029
-1144
lines changed

11 files changed

+1029
-1144
lines changed

eslint.config.mjs

+25
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,35 @@
11
// eslint-disable-next-line import-x/extensions,import-x/no-unresolved
22
import { defineConfig, globalIgnores } from 'eslint/config';
33
import satya164 from 'eslint-config-satya164';
4+
import vitest from '@vitest/eslint-plugin';
45

56
export default defineConfig([
67
satya164,
78

9+
{
10+
files: ['**/*.{spec,test}.{js,ts,tsx}', '**/__tests__/**/*.{js,ts,tsx}'],
11+
12+
plugins: {
13+
vitest,
14+
},
15+
16+
rules: {
17+
...vitest.configs.recommended.rules,
18+
19+
'vitest/consistent-test-it': ['error', { fn: 'test' }],
20+
'vitest/expect-expect': 'error',
21+
'vitest/no-disabled-tests': 'error',
22+
'vitest/no-duplicate-hooks': 'error',
23+
'vitest/no-test-prefixes': 'error',
24+
'vitest/no-test-return-statement': 'error',
25+
'vitest/prefer-to-be': 'error',
26+
'vitest/prefer-todo': 'error',
27+
'vitest/require-to-throw-message': 'error',
28+
29+
'jest/no-deprecated-functions': 'off',
30+
},
31+
},
32+
833
globalIgnores([
934
'**/.next/',
1035
'**/.expo/',

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"@evilmartians/lefthook": "^1.5.0",
2727
"@lerna-lite/cli": "^1.13.0",
2828
"@lerna-lite/run": "^1.13.0",
29+
"@vitest/eslint-plugin": "^1.1.39",
2930
"commitlint": "^17.0.2",
3031
"concurrently": "^7.2.2",
3132
"eslint": "^9.23.0",

packages/react-native-builder-bob/package.json

+3-9
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,7 @@
3737
},
3838
"scripts": {
3939
"prepare": "babel --extensions .ts,.tsx src --out-dir lib --source-maps --delete-dir-on-start",
40-
"test": "jest"
41-
},
42-
"jest": {
43-
"testPathIgnorePatterns": [
44-
"/lib/"
45-
]
40+
"test": "vitest"
4641
},
4742
"dependencies": {
4843
"@babel/core": "^7.25.2",
@@ -71,7 +66,6 @@
7166
},
7267
"devDependencies": {
7368
"@babel/cli": "^7.24.8",
74-
"@jest/globals": "^29.7.0",
7569
"@types/babel__core": "^7.1.19",
7670
"@types/browserslist": "^4.15.0",
7771
"@types/cross-spawn": "^6.0.2",
@@ -85,8 +79,8 @@
8579
"@types/which": "^2.0.1",
8680
"@types/yargs": "^17.0.10",
8781
"concurrently": "^7.2.2",
88-
"jest": "^29.7.0",
8982
"mock-fs": "^5.2.0",
90-
"mock-stdin": "^1.0.0"
83+
"mock-stdin": "^1.0.0",
84+
"vitest": "^3.1.1"
9185
}
9286
}

packages/react-native-builder-bob/src/__tests__/__snapshots__/init.test.ts.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Jest Snapshot v1, https://goo.gl/fbAQLP
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

33
exports[`initializes the configuration 1`] = `
44
"{

packages/react-native-builder-bob/src/__tests__/babel.test.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { expect, test } from '@jest/globals';
1+
import { expect, test } from 'vitest';
22
import { transformFileAsync } from '@babel/core';
33
import fs from 'node:fs';
44
import path from 'node:path';
5+
import plugin from '../babel';
56

67
test.each(['imports', 'exports'])(`adds extension to %s`, async (name) => {
78
const filepath = path.resolve(
@@ -21,7 +22,7 @@ test.each(['imports', 'exports'])(`adds extension to %s`, async (name) => {
2122
babelrc: false,
2223
plugins: [
2324
'@babel/plugin-syntax-typescript',
24-
[require.resolve('../babel.ts'), { extension: 'mjs' }],
25+
[plugin, { extension: 'mjs' }],
2526
],
2627
});
2728

packages/react-native-builder-bob/src/__tests__/init.test.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
import { afterEach, beforeEach, expect, test, jest } from '@jest/globals';
1+
import { afterEach, beforeEach, expect, test, vi, type Mock } from 'vitest';
22
import { readFile } from 'fs-extra';
33
import mockFs from 'mock-fs';
44
import { stdin } from 'mock-stdin';
5-
import { join } from 'path';
5+
import { join } from 'node:path';
66
import { init } from '../init';
77

8-
jest.mock('../../package.json', () => ({
9-
name: 'react-native-builder-bob',
10-
version: '0.5.0',
8+
vi.mock('../../package.json', () => ({
9+
default: {
10+
name: 'react-native-builder-bob',
11+
version: '0.5.0',
12+
},
1113
}));
1214

1315
let io: ReturnType<typeof stdin> | undefined;
@@ -58,17 +60,17 @@ beforeEach(() => {
5860
afterEach(() => {
5961
io?.restore();
6062
mockFs.restore();
61-
jest.restoreAllMocks();
63+
vi.restoreAllMocks();
6264
});
6365

6466
test('initializes the configuration', async () => {
65-
jest.spyOn(process.stdout, 'write').mockImplementation(() => true);
67+
vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
6668

6769
process.chdir(root);
6870

6971
const run = async () => {
7072
await waitFor(() => {
71-
const lastCall = (process.stdout.write as jest.Mock).mock.lastCall;
73+
const lastCall = (process.stdout.write as Mock).mock.lastCall;
7274

7375
if (lastCall == null) {
7476
throw new Error('No output');

packages/react-native-builder-bob/src/init.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import dedent from 'dedent';
55
import isGitDirty from 'is-git-dirty';
66
import prompts, { type PromptObject } from './utils/prompts';
77
import { loadConfig } from './utils/loadConfig';
8-
9-
// eslint-disable-next-line @typescript-eslint/no-require-imports,import-x/no-commonjs
10-
const { name, version } = require('../package.json');
8+
import pack from '../package.json';
119

1210
const FLOW_PRGAMA_REGEX = /\*?\s*@(flow)\b/m;
1311

@@ -37,7 +35,11 @@ export async function init() {
3735
const pkg = JSON.parse(await fs.readFile(projectPackagePath, 'utf-8'));
3836
const result = loadConfig(root);
3937

40-
if (result?.config && pkg.devDependencies && name in pkg.devDependencies) {
38+
if (
39+
result?.config &&
40+
pkg.devDependencies &&
41+
pack.name in pkg.devDependencies
42+
) {
4143
const { shouldContinue } = await prompts({
4244
type: 'confirm',
4345
name: 'shouldContinue',
@@ -75,9 +77,10 @@ export async function init() {
7577
}
7678

7779
pkg.devDependencies = Object.fromEntries(
78-
[...Object.entries(pkg.devDependencies || {}), [name, `^${version}`]].sort(
79-
([a], [b]) => a.localeCompare(b)
80-
)
80+
[
81+
...Object.entries(pkg.devDependencies || {}),
82+
[pack.name, `^${pack.version}`],
83+
].sort(([a], [b]) => a.localeCompare(b))
8184
);
8285

8386
const questions: PromptObject[] = [
@@ -385,7 +388,7 @@ export async function init() {
385388
pkg.files = files;
386389
}
387390

388-
pkg[name] = {
391+
pkg[pack.name] = {
389392
source,
390393
output,
391394
targets: targets.map((t: string) => {

packages/react-native-builder-bob/src/targets/codegen/patches/patchCodegenAndroidPackage.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { expect, test, describe, beforeEach, afterEach } from '@jest/globals';
1+
import { expect, test, describe, beforeEach, afterEach } from 'vitest';
22
import fs from 'fs-extra';
33
import path from 'node:path';
44
import { patchCodegenAndroidPackage } from './patchCodegenAndroidPackage';

packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { expect, test, describe, beforeEach, afterEach } from '@jest/globals';
1+
import { expect, describe, beforeEach, afterEach, test } from 'vitest';
22
import fs from 'fs-extra';
33
import path from 'node:path';
44
import { removeCodegenAppLevelCode } from './removeCodegenAppLevelCode';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { defineConfig } from 'vitest/config';
2+
3+
export default defineConfig({
4+
test: {
5+
exclude: ['lib/'],
6+
},
7+
});

0 commit comments

Comments
 (0)