From b4c7d50fbcc7fc0056a55a696b4ff043cbe2ac9e Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Thu, 4 Dec 2025 09:40:31 +0900 Subject: [PATCH] remove jest-mock --- packages/backend/package.json | 5 +- .../backend/test/unit/AnnouncementService.ts | 9 +- packages/backend/test/unit/FileInfoService.ts | 9 +- packages/backend/test/unit/RelayService.ts | 9 +- packages/backend/test/unit/RoleService.ts | 9 +- .../test/unit/SigninWithPasskeyApiService.ts | 8 +- pnpm-lock.yaml | 106 +++++------------- 7 files changed, 39 insertions(+), 116 deletions(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index 15349b5ebd..6144ee2fe8 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -222,15 +222,14 @@ "eslint-plugin-import": "2.32.0", "execa": "9.6.0", "fkill": "10.0.1", - "jest-mock": "29.7.0", - "jest-util": "29.7.0", "js-yaml": "4.1.1", "nodemon": "3.1.11", "pid-port": "2.0.0", "simple-oauth2": "5.1.0", "supertest": "7.1.4", "unplugin-swc": "1.5.8", + "vite": "7.2.4", "vitest": "4.0.13", - "vite": "7.2.4" + "vitest-mock-extended": "3.1.0" } } diff --git a/packages/backend/test/unit/AnnouncementService.ts b/packages/backend/test/unit/AnnouncementService.ts index 1de25b3f71..773832b799 100644 --- a/packages/backend/test/unit/AnnouncementService.ts +++ b/packages/backend/test/unit/AnnouncementService.ts @@ -7,7 +7,7 @@ process.env.NODE_ENV = 'test'; import { describe, expect, beforeEach, afterEach, test, vi } from 'vitest'; import type { Mocked } from 'vitest'; -import { ModuleMocker } from 'jest-mock'; +import { mockDeep } from 'vitest-mock-extended'; import { Test } from '@nestjs/testing'; import { GlobalModule } from '@/GlobalModule.js'; import { AnnouncementService } from '@/core/AnnouncementService.js'; @@ -27,9 +27,6 @@ import { GlobalEventService } from '@/core/GlobalEventService.js'; import { ModerationLogService } from '@/core/ModerationLogService.js'; import { secureRndstr } from '@/misc/secure-rndstr.js'; import type { TestingModule } from '@nestjs/testing'; -import type { MockMetadata } from 'jest-mock'; - -const moduleMocker = new ModuleMocker(global); describe('AnnouncementService', () => { let app: TestingModule; @@ -85,9 +82,7 @@ describe('AnnouncementService', () => { log: vi.fn(), }; } else if (typeof token === 'function') { - const mockMetadata = moduleMocker.getMetadata(token) as MockMetadata; - const Mock = moduleMocker.generateFromMetadata(mockMetadata); - return new Mock(); + return mockDeep(); } }) .compile(); diff --git a/packages/backend/test/unit/FileInfoService.ts b/packages/backend/test/unit/FileInfoService.ts index d62a29dd7d..fa4a13b171 100644 --- a/packages/backend/test/unit/FileInfoService.ts +++ b/packages/backend/test/unit/FileInfoService.ts @@ -8,23 +8,20 @@ process.env.NODE_ENV = 'test'; import * as assert from 'assert'; import { fileURLToPath } from 'node:url'; import { dirname } from 'node:path'; -import { ModuleMocker } from 'jest-mock'; import { Test } from '@nestjs/testing'; import { afterAll, beforeAll, describe, test } from 'vitest'; +import { mockDeep } from 'vitest-mock-extended'; import { GlobalModule } from '@/GlobalModule.js'; import { FileInfo, FileInfoService } from '@/core/FileInfoService.js'; //import { DI } from '@/di-symbols.js'; import { AiService } from '@/core/AiService.js'; import { LoggerService } from '@/core/LoggerService.js'; import type { TestingModule } from '@nestjs/testing'; -import type { MockMetadata } from 'jest-mock'; const _filename = fileURLToPath(import.meta.url); const _dirname = dirname(_filename); const resources = `${_dirname}/../resources`; -const moduleMocker = new ModuleMocker(global); - describe('FileInfoService', () => { let app: TestingModule; let fileInfoService: FileInfoService; @@ -54,9 +51,7 @@ describe('FileInfoService', () => { // return { }; //} if (typeof token === 'function') { - const mockMetadata = moduleMocker.getMetadata(token) as MockMetadata; - const Mock = moduleMocker.generateFromMetadata(mockMetadata); - return new Mock(); + return mockDeep(); } }) .compile(); diff --git a/packages/backend/test/unit/RelayService.ts b/packages/backend/test/unit/RelayService.ts index a5329dbb49..0d3ce83b11 100644 --- a/packages/backend/test/unit/RelayService.ts +++ b/packages/backend/test/unit/RelayService.ts @@ -8,9 +8,8 @@ process.env.NODE_ENV = 'test'; import { afterAll, beforeAll, describe, test, expect, vi } from 'vitest'; import type { Mocked } from 'vitest'; import { Test } from '@nestjs/testing'; -import { ModuleMocker } from 'jest-mock'; +import { mockDeep } from 'vitest-mock-extended'; import type { TestingModule } from '@nestjs/testing'; -import type { MockMetadata } from 'jest-mock'; import { ApRendererService } from '@/core/activitypub/ApRendererService.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; import { IdService } from '@/core/IdService.js'; @@ -20,8 +19,6 @@ import { SystemAccountService } from '@/core/SystemAccountService.js'; import { GlobalModule } from '@/GlobalModule.js'; import { UtilityService } from '@/core/UtilityService.js'; -const moduleMocker = new ModuleMocker(global); - describe('RelayService', () => { let app: TestingModule; let relayService: RelayService; @@ -46,9 +43,7 @@ describe('RelayService', () => { return { deliver: vi.fn() }; } if (typeof token === 'function') { - const mockMetadata = moduleMocker.getMetadata(token) as MockMetadata; - const Mock = moduleMocker.generateFromMetadata(mockMetadata); - return new Mock(); + return mockDeep(); } }) .compile(); diff --git a/packages/backend/test/unit/RoleService.ts b/packages/backend/test/unit/RoleService.ts index 64e0858be3..4cdd2f9b26 100644 --- a/packages/backend/test/unit/RoleService.ts +++ b/packages/backend/test/unit/RoleService.ts @@ -8,11 +8,10 @@ process.env.NODE_ENV = 'test'; import { setTimeout } from 'node:timers/promises'; import { describe, beforeEach, afterEach, test, expect, vi } from 'vitest'; import type { Mocked } from 'vitest'; -import { ModuleMocker } from 'jest-mock'; +import { mockDeep } from 'vitest-mock-extended'; import { Test } from '@nestjs/testing'; import * as lolex from '@sinonjs/fake-timers'; import type { TestingModule } from '@nestjs/testing'; -import type { MockMetadata } from 'jest-mock'; import { GlobalModule } from '@/GlobalModule.js'; import { RoleService } from '@/core/RoleService.js'; import { @@ -35,8 +34,6 @@ import { NotificationService } from '@/core/NotificationService.js'; import { RoleCondFormulaValue } from '@/models/Role.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; -const moduleMocker = new ModuleMocker(global); - describe('RoleService', () => { let app: TestingModule; let roleService: RoleService; @@ -138,9 +135,7 @@ describe('RoleService', () => { return { fetch: vi.fn() }; } if (typeof token === 'function') { - const mockMetadata = moduleMocker.getMetadata(token) as MockMetadata; - const Mock = moduleMocker.generateFromMetadata(mockMetadata); - return new Mock(); + return mockDeep(); } }) .compile(); diff --git a/packages/backend/test/unit/SigninWithPasskeyApiService.ts b/packages/backend/test/unit/SigninWithPasskeyApiService.ts index 05d1fb0453..f989d2d29a 100644 --- a/packages/backend/test/unit/SigninWithPasskeyApiService.ts +++ b/packages/backend/test/unit/SigninWithPasskeyApiService.ts @@ -5,11 +5,11 @@ import { IncomingHttpHeaders } from 'node:http'; import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest'; +import { mockDeep } from 'vitest-mock-extended'; import { Test, TestingModule } from '@nestjs/testing'; import { FastifyReply, FastifyRequest } from 'fastify'; import { AuthenticationResponseJSON } from '@simplewebauthn/types'; import { HttpHeader } from 'fastify/types/utils.js'; -import { MockMetadata, ModuleMocker } from 'jest-mock'; import { MiUser } from '@/models/User.js'; import { MiUserProfile, UserProfilesRepository, UsersRepository } from '@/models/_.js'; import { IdService } from '@/core/IdService.js'; @@ -22,8 +22,6 @@ import { WebAuthnService } from '@/core/WebAuthnService.js'; import { SigninService } from '@/server/api/SigninService.js'; import { IdentifiableError } from '@/misc/identifiable-error.js'; -const moduleMocker = new ModuleMocker(global); - class FakeLimiter { public async limit() { return; @@ -95,9 +93,7 @@ describe('SigninWithPasskeyApiService', () => { ], }).useMocker((token) => { if (typeof token === 'function') { - const mockMetadata = moduleMocker.getMetadata(token) as MockMetadata; - const Mock = moduleMocker.generateFromMetadata(mockMetadata); - return new Mock(); + return mockDeep(); } }).compile(); passkeyApiService = app.get(SigninWithPasskeyApiService); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 91d9087079..4b50528344 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -559,12 +559,6 @@ importers: fkill: specifier: 10.0.1 version: 10.0.1 - jest-mock: - specifier: 29.7.0 - version: 29.7.0 - jest-util: - specifier: 29.7.0 - version: 29.7.0 js-yaml: specifier: 4.1.1 version: 4.1.1 @@ -589,6 +583,9 @@ importers: vitest: specifier: 4.0.13 version: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6) + vitest-mock-extended: + specifier: 3.1.0 + version: 3.1.0(typescript@5.9.3)(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)) optionalDependencies: '@swc/core-android-arm64': specifier: 1.3.11 @@ -2643,10 +2640,6 @@ packages: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1': resolution: {integrity: sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw==} peerDependencies: @@ -4523,15 +4516,6 @@ packages: '@types/http-link-header@1.0.7': resolution: {integrity: sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==} - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -4736,12 +4720,6 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.34': - resolution: {integrity: sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==} - '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -5639,10 +5617,6 @@ packages: '@chromatic-com/playwright': optional: true - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - ci-info@4.3.1: resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} engines: {node: '>=8'} @@ -7427,14 +7401,6 @@ packages: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -9999,6 +9965,14 @@ packages: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} + ts-essentials@10.1.1: + resolution: {integrity: sha512-4aTB7KLHKmUvkjNj8V+EdnmuVTiECzn3K+zIbRthumvHu+j44x3w63xpfs0JL3NGIzGXqoQ7AV591xHO+XrOTw==} + peerDependencies: + typescript: '>=4.5.0' + peerDependenciesMeta: + typescript: + optional: true + ts-map@1.0.3: resolution: {integrity: sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==} @@ -10401,6 +10375,12 @@ packages: peerDependencies: vitest: '>=2.0.0' + vitest-mock-extended@3.1.0: + resolution: {integrity: sha512-vCM0VkuocOUBwwqwV7JB7YStw07pqeKvEIrZnR8l3PtwYi6rAAJAyJACeC1UYNfbQWi85nz7EdiXWBFI5hll2g==} + peerDependencies: + typescript: 3.x || 4.x || 5.x + vitest: '>=3.0.0' + vitest-websocket-mock@0.5.0: resolution: {integrity: sha512-vzBWeuF/kD/OCOFzB7WAclb7PxfI105qPkZtdOkPMwZdilBskQjJL4l319JtPtmeovDU7ZVhO3hTfGPjM4txQQ==} peerDependencies: @@ -12128,15 +12108,6 @@ snapshots: dependencies: '@sinclair/typebox': 0.27.8 - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 24.10.1 - '@types/yargs': 17.0.34 - chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))': dependencies: glob: 10.5.0 @@ -14332,16 +14303,6 @@ snapshots: dependencies: '@types/node': 24.10.1 - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - '@types/js-yaml@4.0.9': {} '@types/json-schema@7.0.15': {} @@ -14550,12 +14511,6 @@ snapshots: dependencies: '@types/node': 24.10.1 - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.34': - dependencies: - '@types/yargs-parser': 21.0.3 - '@types/yauzl@2.10.3': dependencies: '@types/node': 24.10.1 @@ -15700,8 +15655,6 @@ snapshots: chromatic@13.3.4: {} - ci-info@3.9.0: {} - ci-info@4.3.1: {} cjs-module-lexer@1.4.3: {} @@ -17843,21 +17796,6 @@ snapshots: jest-get-type@29.6.3: {} - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 24.10.1 - jest-util: 29.7.0 - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 24.10.1 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - jju@1.4.0: {} joi@17.13.3: @@ -20777,6 +20715,10 @@ snapshots: ts-dedent@2.2.0: {} + ts-essentials@10.1.1(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + ts-map@1.0.3: {} tsc-alias@1.8.16: @@ -21123,6 +21065,12 @@ snapshots: dependencies: vitest: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6) + vitest-mock-extended@3.1.0(typescript@5.9.3)(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)): + dependencies: + ts-essentials: 10.1.1(typescript@5.9.3) + typescript: 5.9.3 + vitest: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6) + vitest-websocket-mock@0.5.0(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)): dependencies: '@vitest/utils': 3.2.4