From a052b8aa2889fa2a202958f6c5674ffcd0e9aa7b Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Tue, 25 Feb 2025 12:12:27 +0100 Subject: [PATCH 1/2] test(aws-serverless): Migrate to Vitest --- packages/aws-serverless/jest.config.js | 1 - packages/aws-serverless/package.json | 4 +-- packages/aws-serverless/test/__mocks__/dns.ts | 6 ++-- packages/aws-serverless/test/sdk.test.ts | 34 ++++++++++--------- packages/aws-serverless/test/utils.test.ts | 10 +++--- packages/aws-serverless/tsconfig.test.json | 4 +-- packages/aws-serverless/vite.config.ts | 8 +++++ 7 files changed, 40 insertions(+), 27 deletions(-) delete mode 100644 packages/aws-serverless/jest.config.js create mode 100644 packages/aws-serverless/vite.config.ts diff --git a/packages/aws-serverless/jest.config.js b/packages/aws-serverless/jest.config.js deleted file mode 100644 index 24f49ab59a4c..000000000000 --- a/packages/aws-serverless/jest.config.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../../jest/jest.config.js'); diff --git a/packages/aws-serverless/package.json b/packages/aws-serverless/package.json index 15d91a78fcca..7068792f2164 100644 --- a/packages/aws-serverless/package.json +++ b/packages/aws-serverless/package.json @@ -93,8 +93,8 @@ "clean": "rimraf build dist-awslambda-layer coverage sentry-serverless-*.tgz", "fix": "eslint . --format stylish --fix", "lint": "eslint . --format stylish", - "test": "jest", - "test:watch": "jest --watch", + "test": "vitest run", + "test:watch": "vitest --watch", "yalc:publish": "yalc publish --push --sig" }, "volta": { diff --git a/packages/aws-serverless/test/__mocks__/dns.ts b/packages/aws-serverless/test/__mocks__/dns.ts index d03aa8d3f84b..a0eb8a5f20a9 100644 --- a/packages/aws-serverless/test/__mocks__/dns.ts +++ b/packages/aws-serverless/test/__mocks__/dns.ts @@ -1,2 +1,4 @@ -export const lookup = jest.fn(); -export const resolveTxt = jest.fn(); +import { vi } from 'vitest' + +export const lookup = vi.fn(); +export const resolveTxt = vi.fn(); diff --git a/packages/aws-serverless/test/sdk.test.ts b/packages/aws-serverless/test/sdk.test.ts index 4f68eb0b6edb..b43c356bcf30 100644 --- a/packages/aws-serverless/test/sdk.test.ts +++ b/packages/aws-serverless/test/sdk.test.ts @@ -2,27 +2,29 @@ import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } fr import type { Event } from '@sentry/core'; import type { Callback, Handler } from 'aws-lambda'; +import { vi, expect, describe, test, beforeEach } from 'vitest'; import { init, wrapHandler } from '../src/sdk'; -const mockSpanEnd = jest.fn(); -const mockStartInactiveSpan = jest.fn((...spanArgs) => ({ ...spanArgs })); -const mockStartSpanManual = jest.fn((...spanArgs) => ({ ...spanArgs })); -const mockFlush = jest.fn((...args) => Promise.resolve(args)); -const mockWithScope = jest.fn(); -const mockCaptureMessage = jest.fn(); -const mockCaptureException = jest.fn(); -const mockInit = jest.fn(); +const mockSpanEnd = vi.fn(); +const mockStartInactiveSpan = vi.fn((...spanArgs) => ({ ...spanArgs })); +const mockStartSpanManual = vi.fn((...spanArgs) => ({ ...spanArgs })); +const mockFlush = vi.fn((...args) => Promise.resolve(args)); +const mockWithScope = vi.fn(); +const mockCaptureMessage = vi.fn(); +const mockCaptureException = vi.fn(); +const mockInit = vi.fn(); const mockScope = { - setTag: jest.fn(), - setContext: jest.fn(), - addEventProcessor: jest.fn(), - setTransactionName: jest.fn(), + setTag: vi.fn(), + setContext: vi.fn(), + addEventProcessor: vi.fn(), + setTransactionName: vi.fn(), }; -jest.mock('@sentry/node', () => { - const original = jest.requireActual('@sentry/node'); +vi.mock('@sentry/node', async () => { + // eslint-disable-next-line @typescript-eslint/consistent-type-imports + const original = await vi.importActual('@sentry/node') as typeof import('@sentry/node'); return { ...original, initWithoutDefaultIntegrations: (options: unknown) => { @@ -115,7 +117,7 @@ describe('AWSLambda', () => { fortySix: 'o_O', }; - jest.clearAllMocks(); + vi.clearAllMocks(); }); describe('wrapHandler() options', () => { @@ -495,7 +497,7 @@ describe('AWSLambda', () => { const scopeFunction = mockCaptureException.mock.calls[0][1]; const event: Event = { exception: { values: [{}] } }; let evtProcessor: ((e: Event) => Event) | undefined = undefined; - scopeFunction({ addEventProcessor: jest.fn().mockImplementation(proc => (evtProcessor = proc)) }); + scopeFunction({ addEventProcessor: vi.fn().mockImplementation(proc => (evtProcessor = proc)) }); expect(evtProcessor).toBeInstanceOf(Function); // @ts-expect-error just mocking around... diff --git a/packages/aws-serverless/test/utils.test.ts b/packages/aws-serverless/test/utils.test.ts index 197c6ebdf90f..d3c43488124b 100644 --- a/packages/aws-serverless/test/utils.test.ts +++ b/packages/aws-serverless/test/utils.test.ts @@ -1,8 +1,10 @@ import { eventContextExtractor, getAwsTraceData } from '../src/utils'; +import { vi, expect, describe, test, afterEach } from 'vitest'; -const mockExtractContext = jest.fn(); -jest.mock('@opentelemetry/api', () => { - const actualApi = jest.requireActual('@opentelemetry/api'); +const mockExtractContext = vi.fn(); +vi.mock('@opentelemetry/api', async () => { + // eslint-disable-next-line @typescript-eslint/consistent-type-imports + const actualApi =await vi.importActual('@opentelemetry/api') as typeof import('@opentelemetry/api'); return { ...actualApi, propagation: { @@ -63,7 +65,7 @@ describe('getTraceData', () => { describe('eventContextExtractor', () => { afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); test('passes sentry trace data to the propagation extractor', () => { diff --git a/packages/aws-serverless/tsconfig.test.json b/packages/aws-serverless/tsconfig.test.json index 87f6afa06b86..ca7dbeb3be94 100644 --- a/packages/aws-serverless/tsconfig.test.json +++ b/packages/aws-serverless/tsconfig.test.json @@ -1,11 +1,11 @@ { "extends": "./tsconfig.json", - "include": ["test/**/*"], + "include": ["test/**/*", "vite.config.ts"], "compilerOptions": { // should include all types from `./tsconfig.json` plus types for all test frameworks used - "types": ["node", "jest"] + "types": ["node"] // other package-specific, test-specific options } diff --git a/packages/aws-serverless/vite.config.ts b/packages/aws-serverless/vite.config.ts new file mode 100644 index 000000000000..f18ec92095bc --- /dev/null +++ b/packages/aws-serverless/vite.config.ts @@ -0,0 +1,8 @@ +import baseConfig from '../../vite/vite.config'; + +export default { + ...baseConfig, + test: { + ...baseConfig.test, + }, +}; From 574b1f6e956c0d46a8bb94de40a4f49f7196c161 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Tue, 25 Feb 2025 12:39:50 +0100 Subject: [PATCH 2/2] Lint --- packages/aws-serverless/test/__mocks__/dns.ts | 2 +- packages/aws-serverless/test/sdk.test.ts | 4 ++-- packages/aws-serverless/test/utils.test.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/aws-serverless/test/__mocks__/dns.ts b/packages/aws-serverless/test/__mocks__/dns.ts index a0eb8a5f20a9..9084db8be99c 100644 --- a/packages/aws-serverless/test/__mocks__/dns.ts +++ b/packages/aws-serverless/test/__mocks__/dns.ts @@ -1,4 +1,4 @@ -import { vi } from 'vitest' +import { vi } from 'vitest'; export const lookup = vi.fn(); export const resolveTxt = vi.fn(); diff --git a/packages/aws-serverless/test/sdk.test.ts b/packages/aws-serverless/test/sdk.test.ts index b43c356bcf30..bc69a32aed68 100644 --- a/packages/aws-serverless/test/sdk.test.ts +++ b/packages/aws-serverless/test/sdk.test.ts @@ -2,7 +2,7 @@ import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } fr import type { Event } from '@sentry/core'; import type { Callback, Handler } from 'aws-lambda'; -import { vi, expect, describe, test, beforeEach } from 'vitest'; +import { beforeEach, describe, expect, test, vi } from 'vitest'; import { init, wrapHandler } from '../src/sdk'; @@ -24,7 +24,7 @@ const mockScope = { vi.mock('@sentry/node', async () => { // eslint-disable-next-line @typescript-eslint/consistent-type-imports - const original = await vi.importActual('@sentry/node') as typeof import('@sentry/node'); + const original = (await vi.importActual('@sentry/node')) as typeof import('@sentry/node'); return { ...original, initWithoutDefaultIntegrations: (options: unknown) => { diff --git a/packages/aws-serverless/test/utils.test.ts b/packages/aws-serverless/test/utils.test.ts index d3c43488124b..8fba98d0add6 100644 --- a/packages/aws-serverless/test/utils.test.ts +++ b/packages/aws-serverless/test/utils.test.ts @@ -1,10 +1,10 @@ +import { afterEach, describe, expect, test, vi } from 'vitest'; import { eventContextExtractor, getAwsTraceData } from '../src/utils'; -import { vi, expect, describe, test, afterEach } from 'vitest'; const mockExtractContext = vi.fn(); vi.mock('@opentelemetry/api', async () => { // eslint-disable-next-line @typescript-eslint/consistent-type-imports - const actualApi =await vi.importActual('@opentelemetry/api') as typeof import('@opentelemetry/api'); + const actualApi = (await vi.importActual('@opentelemetry/api')) as typeof import('@opentelemetry/api'); return { ...actualApi, propagation: {