diff --git a/.github/workflows/sync-h5.yml b/.github/workflows/sync-h5.yml index 193ebdd79827e0a9d8077b51af1fc03353901975..09f83e98e4096ae39168ed856351294f4a8cf18c 100644 --- a/.github/workflows/sync-h5.yml +++ b/.github/workflows/sync-h5.yml @@ -38,6 +38,6 @@ jobs: branch: new-site # action 应该部署到的分支 。 folder: site_docs #操作应该部署的文件夹 。 clean: false - repository-name: jd-opensource/nutui-docs + repository-name: jdf2e/nutui-docs token: ${{ secrets.GIT_ACTION }} target-folder: src/docs_vue diff --git a/.github/workflows/sync-taro.yml b/.github/workflows/sync-taro.yml index 85812bf7b233b838637600d3386d502818818da1..bf5dc949eca4a02c43ecd3813e5f642895aa94a6 100644 --- a/.github/workflows/sync-taro.yml +++ b/.github/workflows/sync-taro.yml @@ -38,6 +38,6 @@ jobs: branch: new-site # action 应该部署到的分支 。 folder: site_docs #操作应该部署的文件夹 。 clean: false - repository-name: jd-opensource/nutui-docs + repository-name: jdf2e/nutui-docs token: ${{ secrets.GIT_ACTION }} target-folder: src/docs_vue_taro diff --git a/src/packages/__VUE/avatarcropper/__tests__/avatarcropper.spec.ts b/src/packages/__VUE/avatarcropper/__tests__/avatarcropper.spec.ts index 7a8a412fcf0378e4c06131020b9d7a09da94828e..46fd39b9615324dc5b94975fba1a5b4f06df5c0a 100644 --- a/src/packages/__VUE/avatarcropper/__tests__/avatarcropper.spec.ts +++ b/src/packages/__VUE/avatarcropper/__tests__/avatarcropper.spec.ts @@ -1,4 +1,3 @@ -import 'vitest-canvas-mock' import { mount } from '@vue/test-utils' import { AvatarCropper } from '@nutui/nutui' import { sleep, trigger, triggerDrag } from '@/packages/utils/unit' diff --git a/src/packages/__VUE/signature/__tests__/__snapshots__/signature.spec.tsx.snap b/src/packages/__VUE/signature/__tests__/__snapshots__/signature.spec.tsx.snap index 86fc650ba250abe5bd3b2347cb86f5f14a0604b0..a7eb6ebb2c28b0c4e87f74e83a393e6d41ca2385 100644 --- a/src/packages/__VUE/signature/__tests__/__snapshots__/signature.spec.tsx.snap +++ b/src/packages/__VUE/signature/__tests__/__snapshots__/signature.spec.tsx.snap @@ -1,3 +1,3 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`props custom-class 1`] = `"data:image/png;base64,00"`; +exports[`props custom-class 1`] = `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="`; diff --git a/src/packages/__VUE/signature/__tests__/signature.spec.tsx b/src/packages/__VUE/signature/__tests__/signature.spec.tsx index e423913bc8826643714a5896cc2101bde13127d6..98b3254e42a669a2c3997a391f37dbf2132ef3e2 100644 --- a/src/packages/__VUE/signature/__tests__/signature.spec.tsx +++ b/src/packages/__VUE/signature/__tests__/signature.spec.tsx @@ -1,6 +1,5 @@ import { mount } from '@vue/test-utils' import { Signature } from '@nutui/nutui' -import 'vitest-canvas-mock' test('props custom-class', async () => { const wrapper = mount(() => { diff --git a/src/packages/__VUE/watermark/__tests__/watermark.spec.tsx b/src/packages/__VUE/watermark/__tests__/watermark.spec.tsx index dcd5a217449ac52c4a9ca09c7499bb659f7e3674..76626d9568ae07eaee4e4580ae568aefda51c600 100644 --- a/src/packages/__VUE/watermark/__tests__/watermark.spec.tsx +++ b/src/packages/__VUE/watermark/__tests__/watermark.spec.tsx @@ -1,7 +1,6 @@ import { mount } from '@vue/test-utils' import { Watermark } from '@nutui/nutui' import { nextTick } from 'vue' -import 'vitest-canvas-mock' test('WaterMark: fullPage = true', async () => { const wrapper = mount(() => { diff --git a/test-setup.ts b/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..00b3de27ea09df8a020dec778a604e55f6b269b6 --- /dev/null +++ b/test-setup.ts @@ -0,0 +1,111 @@ +// Mock Canvas API for Vitest +import { vi } from 'vitest' + +// Mock HTMLCanvasElement.getContext +Object.defineProperty(HTMLCanvasElement.prototype, 'getContext', { + value: vi.fn(() => ({ + fillRect: vi.fn(), + clearRect: vi.fn(), + getImageData: vi.fn(() => ({ + data: new Array(4) + })), + putImageData: vi.fn(), + createImageData: vi.fn(() => []), + setTransform: vi.fn(), + drawImage: vi.fn(), + save: vi.fn(), + fillText: vi.fn(), + restore: vi.fn(), + beginPath: vi.fn(), + moveTo: vi.fn(), + lineTo: vi.fn(), + closePath: vi.fn(), + stroke: vi.fn(), + translate: vi.fn(), + scale: vi.fn(), + rotate: vi.fn(), + arc: vi.fn(), + fill: vi.fn(), + measureText: vi.fn(() => ({ width: 0 })), + transform: vi.fn(), + rect: vi.fn(), + clip: vi.fn() + })), + writable: true, + configurable: true +}) + +// Mock HTMLCanvasElement.toDataURL +Object.defineProperty(HTMLCanvasElement.prototype, 'toDataURL', { + value: vi.fn(() => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=='), + writable: true, + configurable: true +}) + +// Mock HTMLCanvasElement.toBlob +Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', { + value: vi.fn((callback) => { + const blob = new Blob([''], { type: 'image/png' }) + callback(blob) + }), + writable: true, + configurable: true +}) + +// Mock window.devicePixelRatio +Object.defineProperty(window, 'devicePixelRatio', { + value: 1, + writable: true, + configurable: true +}) + +// Mock Image constructor +global.Image = class MockImage { + onload: (() => void) | null = null + onerror: (() => void) | null = null + src = '' + crossOrigin = '' + referrerPolicy = '' + width = 0 + height = 0 + + constructor() { + setTimeout(() => { + if (this.onload) { + this.onload() + } + }, 0) + } +} as any + +// Mock createImageBitmap +global.createImageBitmap = vi.fn(() => Promise.resolve({ + width: 100, + height: 100, + close: vi.fn() +})) + +// Mock OffscreenCanvas +global.OffscreenCanvas = class MockOffscreenCanvas { + width: number + height: number + + constructor(width: number, height: number) { + this.width = width + this.height = height + } + + getContext() { + return { + fillRect: vi.fn(), + clearRect: vi.fn(), + drawImage: vi.fn(), + getImageData: vi.fn(() => ({ data: new Array(4) })), + putImageData: vi.fn() + } + } + + convertToBlob() { + return Promise.resolve(new Blob([''], { type: 'image/png' })) + } +} as any diff --git a/vite.config.ts b/vite.config.ts index d3acd526f593500e0e973972885de173f409e7c7..a3beab31416aa99869ca461a737218a50cd0456e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -71,6 +71,7 @@ export default defineConfig((env: ConfigEnv) => ({ provider: 'v8' }, include: ['src/packages/__VUE/**/*.(test|spec).(ts|tsx)'], - reporters: ['default', 'html'] + reporters: ['default', 'html'], + setupFiles: ['./test-setup.ts'] } }) as UserConfig)