mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-05-28 18:26:54 +00:00
chore(api): migrate tests to Vitest v4 (#65950)
This commit is contained in:
+2
-2
@@ -51,7 +51,7 @@
|
|||||||
"@types/nodemailer": "6.4.22",
|
"@types/nodemailer": "6.4.22",
|
||||||
"@types/supertest": "2.0.16",
|
"@types/supertest": "2.0.16",
|
||||||
"@types/validator": "13.15.10",
|
"@types/validator": "13.15.10",
|
||||||
"@vitest/ui": "^3.2.4",
|
"@vitest/ui": "^4.0.15",
|
||||||
"dotenv-cli": "7.4.4",
|
"dotenv-cli": "7.4.4",
|
||||||
"eslint": "^9.39.1",
|
"eslint": "^9.39.1",
|
||||||
"eslint-plugin-jsdoc": "48.11.0",
|
"eslint-plugin-jsdoc": "48.11.0",
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
"supertest": "6.3.3",
|
"supertest": "6.3.3",
|
||||||
"tsx": "4.21.0",
|
"tsx": "4.21.0",
|
||||||
"typescript": "5.9.3",
|
"typescript": "5.9.3",
|
||||||
"vitest": "^3.2.4"
|
"vitest": "^4.0.15"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=24",
|
"node": ">=24",
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { describe, it, expect, beforeAll, afterAll, vi } from 'vitest';
|
import { describe, it, expect, beforeAll, afterAll, vi } from 'vitest';
|
||||||
|
import type { MockInstance } from 'vitest';
|
||||||
import {
|
import {
|
||||||
ExamEnvironmentAnswer,
|
ExamEnvironmentAnswer,
|
||||||
ExamEnvironmentQuestionType
|
ExamEnvironmentQuestionType
|
||||||
@@ -29,7 +30,7 @@ import {
|
|||||||
// generate a valid exam.
|
// generate a valid exam.
|
||||||
// Another option is to call `generateExam` hundreds of times in a loop test :shrug:
|
// Another option is to call `generateExam` hundreds of times in a loop test :shrug:
|
||||||
describe('Exam Environment mocked Math.random', () => {
|
describe('Exam Environment mocked Math.random', () => {
|
||||||
let spy: ReturnType<typeof vi.spyOn>;
|
let spy: MockInstance;
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
spy = vi.spyOn(Math, 'random').mockReturnValue(0.123456789);
|
spy = vi.spyOn(Math, 'random').mockReturnValue(0.123456789);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ describe('findOrCreateUser', () => {
|
|||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
await fastify.prisma.user.deleteMany({ where: { email } });
|
await fastify.prisma.user.deleteMany({ where: { email } });
|
||||||
await fastify.prisma.dripCampaign.deleteMany({ where: { email } });
|
await fastify.prisma.dripCampaign.deleteMany({ where: { email } });
|
||||||
await fastify.close();
|
vi.restoreAllMocks();
|
||||||
vi.clearAllMocks();
|
captureException.mockReset();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should send a message to Sentry if there are multiple users with the same email', async () => {
|
test('should send a message to Sentry if there are multiple users with the same email', async () => {
|
||||||
@@ -130,9 +130,10 @@ describe('findOrCreateUser', () => {
|
|||||||
test('should not prevent user creation if drip campaign record creation fails', async () => {
|
test('should not prevent user creation if drip campaign record creation fails', async () => {
|
||||||
vi.spyOn(fastify.gb, 'isOn').mockImplementationOnce(() => true);
|
vi.spyOn(fastify.gb, 'isOn').mockImplementationOnce(() => true);
|
||||||
|
|
||||||
// Mock dripCampaign.create to throw an error
|
const originalCreate = fastify.prisma.dripCampaign.create;
|
||||||
const createSpy = vi
|
|
||||||
.spyOn(fastify.prisma.dripCampaign, 'create')
|
fastify.prisma.dripCampaign.create = vi
|
||||||
|
.fn()
|
||||||
.mockRejectedValueOnce(new Error('Database error'));
|
.mockRejectedValueOnce(new Error('Database error'));
|
||||||
|
|
||||||
const user = await findOrCreateUser(fastify, email);
|
const user = await findOrCreateUser(fastify, email);
|
||||||
@@ -140,7 +141,6 @@ describe('findOrCreateUser', () => {
|
|||||||
expect(user).toBeDefined();
|
expect(user).toBeDefined();
|
||||||
expect(user.id).toBeTruthy();
|
expect(user.id).toBeTruthy();
|
||||||
|
|
||||||
// Verify error was captured by Sentry
|
|
||||||
expect(captureException).toHaveBeenCalledTimes(1);
|
expect(captureException).toHaveBeenCalledTimes(1);
|
||||||
expect(captureException).toHaveBeenCalledWith(
|
expect(captureException).toHaveBeenCalledWith(
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
@@ -148,7 +148,7 @@ describe('findOrCreateUser', () => {
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
createSpy.mockRestore();
|
fastify.prisma.dripCampaign.create = originalCreate;
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should not create drip campaign for existing users', async () => {
|
test('should not create drip campaign for existing users', async () => {
|
||||||
|
|||||||
@@ -424,11 +424,10 @@ describe('certificate routes', () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
vi.spyOn(fastifyTestInstance.prisma.user, 'update').mockImplementation(
|
vi.spyOn(fastifyTestInstance.prisma, 'user', 'get').mockReturnValue({
|
||||||
() => {
|
...fastifyTestInstance.prisma.user,
|
||||||
throw new Error('test');
|
update: vi.fn().mockRejectedValueOnce(new Error('test'))
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
const response = await superRequest('/certificate/verify', {
|
const response = await superRequest('/certificate/verify', {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
|
|||||||
@@ -378,11 +378,17 @@ describe('challengeRoutes', () => {
|
|||||||
// function with undefined when restoring a prisma function (for some
|
// function with undefined when restoring a prisma function (for some
|
||||||
// reason)
|
// reason)
|
||||||
test('Should return an error response if something goes wrong', async () => {
|
test('Should return an error response if something goes wrong', async () => {
|
||||||
|
const originalUserToken = fastifyTestInstance.prisma.userToken;
|
||||||
|
|
||||||
vi.spyOn(
|
vi.spyOn(
|
||||||
fastifyTestInstance.prisma.userToken,
|
fastifyTestInstance.prisma,
|
||||||
'findUnique'
|
'userToken',
|
||||||
).mockImplementationOnce(() => {
|
'get'
|
||||||
throw new Error('Database error');
|
).mockReturnValue({
|
||||||
|
...originalUserToken,
|
||||||
|
findUnique: vi.fn().mockImplementationOnce(() => {
|
||||||
|
throw new Error('Database error');
|
||||||
|
})
|
||||||
});
|
});
|
||||||
const tokenResponse = await superPost('/user/user-token');
|
const tokenResponse = await superPost('/user/user-token');
|
||||||
const token = (tokenResponse.body as { userToken: string }).userToken;
|
const token = (tokenResponse.body as { userToken: string }).userToken;
|
||||||
|
|||||||
@@ -124,30 +124,31 @@ const generateMockSubCreate = (status: string) => () =>
|
|||||||
const defaultError = () =>
|
const defaultError = () =>
|
||||||
Promise.reject(new Error('Stripe encountered an error'));
|
Promise.reject(new Error('Stripe encountered an error'));
|
||||||
|
|
||||||
vi.mock('stripe', () => {
|
vi.mock('stripe', () => ({
|
||||||
return {
|
default: class {
|
||||||
default: vi.fn().mockImplementation(() => {
|
constructor() {}
|
||||||
return {
|
|
||||||
customers: {
|
customers = {
|
||||||
create: mockCustomerCreate,
|
create: mockCustomerCreate,
|
||||||
update: mockCustomerUpdate
|
update: mockCustomerUpdate
|
||||||
},
|
};
|
||||||
paymentMethods: {
|
|
||||||
attach: mockAttachPaymentMethod
|
paymentMethods = {
|
||||||
},
|
attach: mockAttachPaymentMethod
|
||||||
subscriptions: {
|
};
|
||||||
create: mockSubCreate,
|
|
||||||
retrieve: mockSubRetrieve
|
subscriptions = {
|
||||||
},
|
create: mockSubCreate,
|
||||||
checkout: {
|
retrieve: mockSubRetrieve
|
||||||
sessions: {
|
};
|
||||||
create: mockCheckoutSessionCreate
|
|
||||||
}
|
checkout = {
|
||||||
}
|
sessions: {
|
||||||
};
|
create: mockCheckoutSessionCreate
|
||||||
})
|
}
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
describe('Donate', () => {
|
describe('Donate', () => {
|
||||||
let setCookies: string[];
|
let setCookies: string[];
|
||||||
|
|||||||
@@ -602,16 +602,17 @@ Please wait 5 minutes to resend an authentication link.`
|
|||||||
// function with undefined when restoring a prisma function (for some
|
// function with undefined when restoring a prisma function (for some
|
||||||
// reason)
|
// reason)
|
||||||
test('PUT sends an email to the new email address', async () => {
|
test('PUT sends an email to the new email address', async () => {
|
||||||
|
const originalAuthToken = fastifyTestInstance.prisma.authToken;
|
||||||
vi.spyOn(
|
vi.spyOn(
|
||||||
fastifyTestInstance.prisma.authToken,
|
fastifyTestInstance.prisma,
|
||||||
'create'
|
'authToken',
|
||||||
).mockImplementationOnce(() =>
|
'get'
|
||||||
// @ts-expect-error This is a mock implementation, all we're
|
).mockReturnValue({
|
||||||
// interested in is the id.
|
...originalAuthToken,
|
||||||
Promise.resolve({
|
create: vi.fn().mockResolvedValue({
|
||||||
id: '123'
|
id: '123'
|
||||||
})
|
})
|
||||||
);
|
});
|
||||||
await superPut('/update-my-email').send({
|
await superPut('/update-my-email').send({
|
||||||
email: unusedEmailOne
|
email: unusedEmailOne
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -66,31 +66,27 @@ const generateMockSubCreate = (status: string) => () =>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
vi.mock('stripe', () => {
|
vi.mock('stripe', () => ({
|
||||||
return {
|
default: class {
|
||||||
default: vi.fn().mockImplementation(() => {
|
constructor() {}
|
||||||
return {
|
customers = {
|
||||||
customers: {
|
create: mockCustomerCreate,
|
||||||
create: mockCustomerCreate,
|
update: mockCustomerUpdate
|
||||||
update: mockCustomerUpdate
|
};
|
||||||
},
|
paymentMethods = {
|
||||||
paymentMethods: {
|
attach: mockAttachPaymentMethod
|
||||||
attach: mockAttachPaymentMethod
|
};
|
||||||
},
|
subscriptions = {
|
||||||
subscriptions: {
|
create: mockSubCreate,
|
||||||
create: mockSubCreate,
|
retrieve: mockSubRetrieve
|
||||||
retrieve: mockSubRetrieve
|
};
|
||||||
},
|
checkout = {
|
||||||
checkout: {
|
sessions: {
|
||||||
sessions: {
|
create: mockCheckoutSessionCreate
|
||||||
create: mockCheckoutSessionCreate
|
}
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
};
|
}));
|
||||||
})
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Donate', () => {
|
describe('Donate', () => {
|
||||||
let setCookies: string[];
|
let setCookies: string[];
|
||||||
setupServer();
|
setupServer();
|
||||||
|
|||||||
Generated
+46
-96
@@ -217,8 +217,8 @@ importers:
|
|||||||
specifier: 13.15.10
|
specifier: 13.15.10
|
||||||
version: 13.15.10
|
version: 13.15.10
|
||||||
'@vitest/ui':
|
'@vitest/ui':
|
||||||
specifier: ^3.2.4
|
specifier: ^4.0.15
|
||||||
version: 3.2.4(vitest@3.2.4)
|
version: 4.0.15(vitest@4.0.15)
|
||||||
dotenv-cli:
|
dotenv-cli:
|
||||||
specifier: 7.4.4
|
specifier: 7.4.4
|
||||||
version: 7.4.4
|
version: 7.4.4
|
||||||
@@ -244,8 +244,8 @@ importers:
|
|||||||
specifier: 5.9.3
|
specifier: 5.9.3
|
||||||
version: 5.9.3
|
version: 5.9.3
|
||||||
vitest:
|
vitest:
|
||||||
specifier: ^3.2.4
|
specifier: ^4.0.15
|
||||||
version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.13)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@24.10.13)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@24.10.13)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
||||||
|
|
||||||
client:
|
client:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -20769,15 +20769,6 @@ snapshots:
|
|||||||
chai: 6.2.2
|
chai: 6.2.2
|
||||||
tinyrainbow: 3.0.3
|
tinyrainbow: 3.0.3
|
||||||
|
|
||||||
'@vitest/mocker@3.2.4(msw@2.12.10(@types/node@24.10.13)(typescript@5.9.3))(vite@7.1.3(@types/node@24.10.13)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))':
|
|
||||||
dependencies:
|
|
||||||
'@vitest/spy': 3.2.4
|
|
||||||
estree-walker: 3.0.3
|
|
||||||
magic-string: 0.30.17
|
|
||||||
optionalDependencies:
|
|
||||||
msw: 2.12.10(@types/node@24.10.13)(typescript@5.9.3)
|
|
||||||
vite: 7.1.3(@types/node@24.10.13)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
|
||||||
|
|
||||||
'@vitest/mocker@3.2.4(msw@2.12.10(@types/node@25.2.3)(typescript@5.9.3))(vite@7.1.3(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))':
|
'@vitest/mocker@3.2.4(msw@2.12.10(@types/node@25.2.3)(typescript@5.9.3))(vite@7.1.3(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/spy': 3.2.4
|
'@vitest/spy': 3.2.4
|
||||||
@@ -20860,7 +20851,7 @@ snapshots:
|
|||||||
sirv: 3.0.2
|
sirv: 3.0.2
|
||||||
tinyglobby: 0.2.14
|
tinyglobby: 0.2.14
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.13)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@24.10.13)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@25.2.3)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
||||||
|
|
||||||
'@vitest/ui@4.0.15(vitest@4.0.15)':
|
'@vitest/ui@4.0.15(vitest@4.0.15)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -20871,7 +20862,7 @@ snapshots:
|
|||||||
sirv: 3.0.2
|
sirv: 3.0.2
|
||||||
tinyglobby: 0.2.15
|
tinyglobby: 0.2.15
|
||||||
tinyrainbow: 3.0.3
|
tinyrainbow: 3.0.3
|
||||||
vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@25.2.3)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@24.10.13)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
||||||
|
|
||||||
'@vitest/utils@3.2.4':
|
'@vitest/utils@3.2.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -30436,27 +30427,6 @@ snapshots:
|
|||||||
unist-util-stringify-position: 2.0.3
|
unist-util-stringify-position: 2.0.3
|
||||||
vfile-message: 2.0.4
|
vfile-message: 2.0.4
|
||||||
|
|
||||||
vite-node@3.2.4(@types/node@24.10.13)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
|
||||||
dependencies:
|
|
||||||
cac: 6.7.14
|
|
||||||
debug: 4.4.1
|
|
||||||
es-module-lexer: 1.7.0
|
|
||||||
pathe: 2.0.3
|
|
||||||
vite: 7.1.3(@types/node@24.10.13)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- '@types/node'
|
|
||||||
- jiti
|
|
||||||
- less
|
|
||||||
- lightningcss
|
|
||||||
- sass
|
|
||||||
- sass-embedded
|
|
||||||
- stylus
|
|
||||||
- sugarss
|
|
||||||
- supports-color
|
|
||||||
- terser
|
|
||||||
- tsx
|
|
||||||
- yaml
|
|
||||||
|
|
||||||
vite-node@3.2.4(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
vite-node@3.2.4(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
cac: 6.7.14
|
cac: 6.7.14
|
||||||
@@ -30478,22 +30448,6 @@ snapshots:
|
|||||||
- tsx
|
- tsx
|
||||||
- yaml
|
- yaml
|
||||||
|
|
||||||
vite@7.1.3(@types/node@24.10.13)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
|
||||||
dependencies:
|
|
||||||
esbuild: 0.25.9
|
|
||||||
fdir: 6.5.0(picomatch@4.0.3)
|
|
||||||
picomatch: 4.0.3
|
|
||||||
postcss: 8.5.6
|
|
||||||
rollup: 4.46.2
|
|
||||||
tinyglobby: 0.2.14
|
|
||||||
optionalDependencies:
|
|
||||||
'@types/node': 24.10.13
|
|
||||||
fsevents: 2.3.3
|
|
||||||
jiti: 2.6.1
|
|
||||||
terser: 5.46.0
|
|
||||||
tsx: 4.21.0
|
|
||||||
yaml: 2.8.1
|
|
||||||
|
|
||||||
vite@7.1.3(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
vite@7.1.3(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: 0.25.9
|
esbuild: 0.25.9
|
||||||
@@ -30580,50 +30534,6 @@ snapshots:
|
|||||||
- debug
|
- debug
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.10.13)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@24.10.13)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
|
||||||
dependencies:
|
|
||||||
'@types/chai': 5.2.2
|
|
||||||
'@vitest/expect': 3.2.4
|
|
||||||
'@vitest/mocker': 3.2.4(msw@2.12.10(@types/node@24.10.13)(typescript@5.9.3))(vite@7.1.3(@types/node@24.10.13)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))
|
|
||||||
'@vitest/pretty-format': 3.2.4
|
|
||||||
'@vitest/runner': 3.2.4
|
|
||||||
'@vitest/snapshot': 3.2.4
|
|
||||||
'@vitest/spy': 3.2.4
|
|
||||||
'@vitest/utils': 3.2.4
|
|
||||||
chai: 5.2.1
|
|
||||||
debug: 4.4.1
|
|
||||||
expect-type: 1.2.2
|
|
||||||
magic-string: 0.30.17
|
|
||||||
pathe: 2.0.3
|
|
||||||
picomatch: 4.0.3
|
|
||||||
std-env: 3.9.0
|
|
||||||
tinybench: 2.9.0
|
|
||||||
tinyexec: 0.3.2
|
|
||||||
tinyglobby: 0.2.14
|
|
||||||
tinypool: 1.1.1
|
|
||||||
tinyrainbow: 2.0.0
|
|
||||||
vite: 7.1.3(@types/node@24.10.13)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
|
||||||
vite-node: 3.2.4(@types/node@24.10.13)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
|
||||||
why-is-node-running: 2.3.0
|
|
||||||
optionalDependencies:
|
|
||||||
'@types/debug': 4.1.12
|
|
||||||
'@types/node': 24.10.13
|
|
||||||
'@vitest/ui': 3.2.4(vitest@3.2.4)
|
|
||||||
jsdom: 26.1.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- jiti
|
|
||||||
- less
|
|
||||||
- lightningcss
|
|
||||||
- msw
|
|
||||||
- sass
|
|
||||||
- sass-embedded
|
|
||||||
- stylus
|
|
||||||
- sugarss
|
|
||||||
- supports-color
|
|
||||||
- terser
|
|
||||||
- tsx
|
|
||||||
- yaml
|
|
||||||
|
|
||||||
vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@25.2.3)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@25.2.3)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/chai': 5.2.2
|
'@types/chai': 5.2.2
|
||||||
@@ -30748,6 +30658,46 @@ snapshots:
|
|||||||
- tsx
|
- tsx
|
||||||
- yaml
|
- yaml
|
||||||
|
|
||||||
|
vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@24.10.13)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
||||||
|
dependencies:
|
||||||
|
'@vitest/expect': 4.0.15
|
||||||
|
'@vitest/mocker': 4.0.15(msw@2.12.10(@types/node@24.10.13)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))
|
||||||
|
'@vitest/pretty-format': 4.0.15
|
||||||
|
'@vitest/runner': 4.0.15
|
||||||
|
'@vitest/snapshot': 4.0.15
|
||||||
|
'@vitest/spy': 4.0.15
|
||||||
|
'@vitest/utils': 4.0.15
|
||||||
|
es-module-lexer: 1.7.0
|
||||||
|
expect-type: 1.3.0
|
||||||
|
magic-string: 0.30.21
|
||||||
|
obug: 2.1.1
|
||||||
|
pathe: 2.0.3
|
||||||
|
picomatch: 4.0.3
|
||||||
|
std-env: 3.10.0
|
||||||
|
tinybench: 2.9.0
|
||||||
|
tinyexec: 1.0.2
|
||||||
|
tinyglobby: 0.2.15
|
||||||
|
tinyrainbow: 3.0.3
|
||||||
|
vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)
|
||||||
|
why-is-node-running: 2.3.0
|
||||||
|
optionalDependencies:
|
||||||
|
'@opentelemetry/api': 1.9.0
|
||||||
|
'@types/node': 24.10.13
|
||||||
|
'@vitest/ui': 4.0.15(vitest@4.0.15)
|
||||||
|
jsdom: 26.1.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- jiti
|
||||||
|
- less
|
||||||
|
- lightningcss
|
||||||
|
- msw
|
||||||
|
- sass
|
||||||
|
- sass-embedded
|
||||||
|
- stylus
|
||||||
|
- sugarss
|
||||||
|
- terser
|
||||||
|
- tsx
|
||||||
|
- yaml
|
||||||
|
|
||||||
vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@25.2.3)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.10(@types/node@25.2.3)(typescript@5.9.3))(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/expect': 4.0.15
|
'@vitest/expect': 4.0.15
|
||||||
|
|||||||
Reference in New Issue
Block a user