Skip to content

Commit ef4ca11

Browse files
committed
Revert "chore(clerk-js): Convert all Jest tests to Vitest (#6798)"
This reverts commit e5b7eb7.
1 parent 81e3d26 commit ef4ca11

File tree

184 files changed

+1541
-1269
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

184 files changed

+1541
-1269
lines changed

.changeset/two-dancers-wait.md

Lines changed: 0 additions & 2 deletions
This file was deleted.

eslint.config.mjs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,6 @@ export default tseslint.config([
335335
jest: pluginJest,
336336
},
337337
rules: {
338-
'@typescript-eslint/no-non-null-assertion': 'off',
339338
'@typescript-eslint/unbound-method': 'off',
340339
'jest/unbound-method': 'error',
341340
},
@@ -366,7 +365,7 @@ export default tseslint.config([
366365
},
367366
{
368367
name: 'packages/clerk-js - vitest',
369-
files: ['packages/clerk-js/src/**/*.test.{ts,tsx}'],
368+
files: ['packages/clerk-js/src/**/*.spec.{ts,tsx}'],
370369
rules: {
371370
'jest/unbound-method': 'off',
372371
'@typescript-eslint/unbound-method': 'off',

packages/clerk-js/jest.config.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
const { name } = require('./package.json');
2+
3+
/** @type {import('ts-jest').JestConfigWithTsJest} */
4+
const config = {
5+
displayName: name.replace('@clerk', ''),
6+
injectGlobals: true,
7+
globals: {
8+
__PKG_NAME__: '@clerk/clerk-js',
9+
__PKG_VERSION__: 'test',
10+
__BUILD_VARIANT_CHIPS__: false,
11+
__BUILD_DISABLE_RHC__: false,
12+
},
13+
14+
testEnvironment: '<rootDir>/jest.jsdom-with-timezone.ts',
15+
roots: ['<rootDir>/src'],
16+
setupFiles: ['./jest.setup.ts'],
17+
setupFilesAfterEnv: ['./jest.setup-after-env.ts'],
18+
testRegex: [
19+
'/__tests__/(.+/)*.*.test.[jt]sx?$',
20+
'/ui/.*/__tests__/.*.test.[jt]sx?$',
21+
'/(core|utils)/.*.test.[jt]sx?$',
22+
],
23+
testPathIgnorePatterns: ['/node_modules/'],
24+
collectCoverage: false,
25+
coverageProvider: 'v8',
26+
coverageDirectory: 'coverage',
27+
coveragePathIgnorePatterns: ['/node_modules/'],
28+
// collectCoverageFrom: [
29+
// '**/*.{js,jsx,ts,tsx}',
30+
// '!**/*.d.ts',
31+
// '!**/index.ts',
32+
// '!**/index.browser.ts',
33+
// '!**/index.headless.ts',
34+
// '!**/index.headless.browser.ts',
35+
// '!**/coverage/**',
36+
// '!**/dist/**',
37+
// '!**/node_modules/**',
38+
// ],
39+
transformIgnorePatterns: ['[/\\\\]node_modules[/\\\\](?!(@formkit/auto-animate/react)).+\\.(js|jsx|mjs|cjs|ts|tsx)$'],
40+
moduleDirectories: ['node_modules', '<rootDir>/src'],
41+
moduleNameMapper: {
42+
'@/(.*)': '<rootDir>/src/$1',
43+
},
44+
transform: {
45+
'^.+\\.m?tsx?$': [
46+
'@swc/jest',
47+
{
48+
jsc: {
49+
transform: {
50+
react: {
51+
runtime: 'automatic',
52+
importSource: '@emotion/react',
53+
},
54+
},
55+
},
56+
},
57+
],
58+
'^.+\\.svg$': '<rootDir>/svgTransform.js',
59+
},
60+
};
61+
62+
module.exports = config;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import JSDOMEnvironment from 'jest-environment-jsdom';
2+
3+
/**
4+
* Timezone-aware jsdom Jest environment. Supports `@timezone` JSDoc
5+
* pragma within test suites to set timezone.
6+
*
7+
* You'd make another copy of this extending the Node environment,
8+
* if needed for Node server environment-based tests.
9+
*/
10+
module.exports = class TimezoneAwareJSDOMEnvironment extends JSDOMEnvironment {
11+
// @ts-ignore
12+
constructor(config, context) {
13+
// Allow test suites to change timezone, even if TZ is passed in a script.
14+
// Falls back to existing TZ environment variable or UTC if no timezone is specified.
15+
// IMPORTANT: This must happen before super(config) is called, otherwise
16+
// it doesn't work.
17+
process.env.TZ = context.docblockPragmas.timezone || process.env.TZ || 'UTC';
18+
19+
super(config, context);
20+
}
21+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import '@testing-library/jest-dom';

packages/clerk-js/jest.setup.ts

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import crypto from 'node:crypto';
2+
import { TextDecoder, TextEncoder } from 'node:util';
3+
4+
import { jest } from '@jest/globals';
5+
6+
class FakeResponse {}
7+
8+
if (typeof window !== 'undefined') {
9+
Object.defineProperties(globalThis, {
10+
TextDecoder: { value: TextDecoder },
11+
TextEncoder: { value: TextEncoder },
12+
Response: { value: FakeResponse },
13+
crypto: { value: crypto.webcrypto },
14+
});
15+
16+
window.ResizeObserver =
17+
window.ResizeObserver ||
18+
jest.fn().mockImplementation(() => ({
19+
disconnect: jest.fn(),
20+
observe: jest.fn(),
21+
unobserve: jest.fn(),
22+
}));
23+
24+
Object.defineProperty(window, 'matchMedia', {
25+
writable: true,
26+
value: jest.fn().mockImplementation(query => ({
27+
matches: false,
28+
media: query,
29+
onchange: null,
30+
addEventListener: jest.fn(),
31+
removeEventListener: jest.fn(),
32+
dispatchEvent: jest.fn(),
33+
})),
34+
});
35+
36+
//@ts-expect-error - JSDOM doesn't provide IntersectionObserver, so we mock it for testing
37+
global.IntersectionObserver = class IntersectionObserver {
38+
constructor() {}
39+
40+
disconnect() {
41+
return null;
42+
}
43+
44+
observe() {
45+
return null;
46+
}
47+
48+
takeRecords() {
49+
return null;
50+
}
51+
52+
unobserve() {
53+
return null;
54+
}
55+
};
56+
57+
// Mock HTMLCanvasElement.prototype.getContext to prevent errors
58+
HTMLCanvasElement.prototype.getContext = jest.fn().mockImplementation(((contextType: string) => {
59+
if (contextType === '2d') {
60+
return {
61+
fillRect: jest.fn(),
62+
getImageData: jest.fn(() => ({ data: new Uint8ClampedArray([255, 255, 255, 255]) }) as unknown as ImageData),
63+
} as unknown as CanvasRenderingContext2D;
64+
}
65+
if (contextType === 'webgl' || contextType === 'webgl2') {
66+
return {} as unknown as WebGLRenderingContext;
67+
}
68+
return null;
69+
}) as any) as jest.MockedFunction<HTMLCanvasElement['getContext']>;
70+
71+
// Mock document.elementFromPoint for input-otp library
72+
Object.defineProperty(document, 'elementFromPoint', {
73+
value: jest.fn().mockReturnValue(null),
74+
writable: true,
75+
});
76+
}

packages/clerk-js/package.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,15 @@
5151
"lint": "eslint src",
5252
"lint:attw": "attw --pack . --profile node16 --ignore-rules named-exports",
5353
"lint:publint": "publint || true",
54-
"test": "vitest --watch=false",
54+
"test": "jest && vitest --watch=false",
55+
"test:cache:clear": "jest --clearCache --useStderr",
56+
"test:ci": "jest --maxWorkers=70%",
57+
"test:coverage": "jest --collectCoverage && open coverage/lcov-report/index.html",
58+
"test:jest": "jest",
5559
"test:sandbox:integration": "playwright test",
5660
"test:sandbox:integration:ui": "playwright test --ui",
5761
"test:sandbox:integration:update-snapshots": "playwright test --update-snapshots",
62+
"test:vitest": "vitest",
5863
"watch": "rspack build --config rspack.config.js --env production --watch"
5964
},
6065
"browserslist": "last 2 years",
@@ -92,6 +97,7 @@
9297
"@rspack/core": "^1.4.11",
9398
"@rspack/plugin-react-refresh": "^1.5.0",
9499
"@svgr/webpack": "^6.5.1",
100+
"@swc/jest": "0.2.39",
95101
"@types/cloudflare-turnstile": "^0.2.2",
96102
"@types/node": "^22.18.1",
97103
"@types/webpack-env": "^1.18.8",
File renamed without changes.

packages/clerk-js/src/core/__tests__/clerk.redirects.test.ts renamed to packages/clerk-js/src/core/__tests__/clerk.redirects.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const mockEnvironmentFetch = vi.fn();
1111
vi.mock('../resources/Client');
1212
vi.mock('../resources/Environment');
1313

14+
// Because Jest, don't ask me why...
1415
vi.mock('../auth/devBrowser', () => ({
1516
createDevBrowser: (): DevBrowser => ({
1617
clear: vi.fn(),

0 commit comments

Comments
 (0)