cherry-studio/tests/renderer.setup.ts

88 lines
2.6 KiB
TypeScript

import '@testing-library/jest-dom/vitest'
import { createRequire } from 'node:module'
import { styleSheetSerializer } from 'jest-styled-components/serializer'
import { expect, vi } from 'vitest'
expect.addSnapshotSerializer(styleSheetSerializer)
// Node.js >= 25 removed `buffer.SlowBuffer`, but some transitive deps still assume it exists.
const require = createRequire(import.meta.url)
const bufferModule = require('buffer')
if (!bufferModule.SlowBuffer) {
bufferModule.SlowBuffer = bufferModule.Buffer
}
// Mock LoggerService globally for renderer tests
vi.mock('@logger', async () => {
const { MockRendererLoggerService, mockRendererLoggerService } = await import('./__mocks__/RendererLoggerService')
return {
LoggerService: MockRendererLoggerService,
loggerService: mockRendererLoggerService
}
})
// Mock uuid globally for renderer tests
let uuidCounter = 0
vi.mock('uuid', () => ({
v4: () => 'test-uuid-' + ++uuidCounter
}))
vi.mock('axios', () => {
const defaultAxiosMock = {
get: vi.fn().mockResolvedValue({ data: {} }), // Mocking axios GET request
post: vi.fn().mockResolvedValue({ data: {} }) // Mocking axios POST request
// You can add other axios methods like put, delete etc. as needed
}
const isAxiosError = (error: unknown): error is { isAxiosError?: boolean } =>
Boolean((error as { isAxiosError?: boolean } | undefined)?.isAxiosError)
return {
default: defaultAxiosMock,
isAxiosError
}
})
vi.stubGlobal('electron', {
ipcRenderer: {
on: vi.fn(),
send: vi.fn()
}
})
vi.stubGlobal('api', {
file: {
read: vi.fn().mockResolvedValue('[]'),
writeWithId: vi.fn().mockResolvedValue(undefined)
}
})
// Node.js >= 25 exposes a non-standard `localStorage`/`sessionStorage` global by default.
// In jsdom tests we want the standard Web Storage API from the jsdom window.
const createStorageMock = () => {
const data = new Map<string, string>()
return {
getItem: (key: string) => data.get(key) ?? null,
setItem: (key: string, value: string) => {
data.set(key, String(value))
},
removeItem: (key: string) => {
data.delete(key)
},
clear: () => {
data.clear()
},
key: (index: number) => Array.from(data.keys())[index] ?? null,
get length() {
return data.size
}
}
}
const localStorageImpl = typeof window?.localStorage?.getItem === 'function' ? window.localStorage : createStorageMock()
vi.stubGlobal('localStorage', localStorageImpl)
const sessionStorageImpl =
typeof window?.sessionStorage?.getItem === 'function' ? window.sessionStorage : createStorageMock()
vi.stubGlobal('sessionStorage', sessionStorageImpl)