feat: manually mirror opencoze's code from bytedance
Change-Id: I09a73aadda978ad9511264a756b2ce51f5761adf
This commit is contained in:
119
frontend/packages/studio/components/vitest.setup.ts
Normal file
119
frontend/packages/studio/components/vitest.setup.ts
Normal file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
// Mock globals
|
||||
vi.stubGlobal('AudioWorkletNode', vi.fn());
|
||||
vi.stubGlobal('SAMI_WS_ORIGIN', vi.fn());
|
||||
vi.stubGlobal('SAMI_APP_KEY', vi.fn());
|
||||
vi.stubGlobal('IS_DEV_MODE', false);
|
||||
vi.stubGlobal('IS_OVERSEA', false);
|
||||
|
||||
// Mock Canvas API 完整版本
|
||||
const createMockCanvas = () => ({
|
||||
getContext: vi.fn(() => ({
|
||||
fillRect: vi.fn(),
|
||||
clearRect: vi.fn(),
|
||||
getImageData: vi.fn(() => ({ data: new Array(4).fill(0) })),
|
||||
putImageData: vi.fn(),
|
||||
createImageData: vi.fn(() => ({ data: new Array(4).fill(0) })),
|
||||
setTransform: vi.fn(),
|
||||
drawImage: vi.fn(),
|
||||
save: vi.fn(),
|
||||
restore: vi.fn(),
|
||||
beginPath: vi.fn(),
|
||||
moveTo: vi.fn(),
|
||||
lineTo: vi.fn(),
|
||||
closePath: vi.fn(),
|
||||
stroke: vi.fn(),
|
||||
fill: vi.fn(),
|
||||
measureText: vi.fn(() => ({ width: 0 })),
|
||||
canvas: { width: 100, height: 100 },
|
||||
})),
|
||||
toDataURL: vi.fn(() => ''),
|
||||
width: 100,
|
||||
height: 100,
|
||||
});
|
||||
|
||||
// Mock Canvas elements and API
|
||||
Object.defineProperty(global, 'HTMLCanvasElement', {
|
||||
value: class MockCanvas {
|
||||
constructor() {
|
||||
Object.assign(this, createMockCanvas());
|
||||
}
|
||||
|
||||
get width() {
|
||||
return 100;
|
||||
}
|
||||
get height() {
|
||||
return 100;
|
||||
}
|
||||
},
|
||||
writable: true,
|
||||
});
|
||||
|
||||
Object.defineProperty(global, 'CanvasRenderingContext2D', {
|
||||
value: vi.fn(),
|
||||
writable: true,
|
||||
});
|
||||
|
||||
// Mock document.createElement for canvas
|
||||
const originalCreateElement = global.document?.createElement;
|
||||
if (global.document) {
|
||||
global.document.createElement = vi.fn(tagName => {
|
||||
if (tagName === 'canvas') {
|
||||
return createMockCanvas();
|
||||
}
|
||||
return originalCreateElement?.call(global.document, tagName);
|
||||
});
|
||||
}
|
||||
|
||||
// CSS 文件 mock
|
||||
vi.mock('*.css', () => ({}));
|
||||
vi.mock('*.scss', () => ({}));
|
||||
vi.mock('*.sass', () => ({}));
|
||||
vi.mock('*.less', () => ({}));
|
||||
vi.mock('*.styl', () => ({}));
|
||||
|
||||
// Mock lottie-web 完整版本
|
||||
vi.mock('lottie-web', () => ({
|
||||
default: {
|
||||
loadAnimation: vi.fn(() => ({
|
||||
play: vi.fn(),
|
||||
pause: vi.fn(),
|
||||
stop: vi.fn(),
|
||||
destroy: vi.fn(),
|
||||
setSpeed: vi.fn(),
|
||||
goToAndStop: vi.fn(),
|
||||
goToAndPlay: vi.fn(),
|
||||
addEventListener: vi.fn(),
|
||||
removeEventListener: vi.fn(),
|
||||
setDirection: vi.fn(),
|
||||
playSegments: vi.fn(),
|
||||
setSubframe: vi.fn(),
|
||||
getDuration: vi.fn(() => 0),
|
||||
totalFrames: 0,
|
||||
currentFrame: 0,
|
||||
currentTime: 0,
|
||||
isLoaded: true,
|
||||
})),
|
||||
registerAnimation: vi.fn(),
|
||||
setQuality: vi.fn(),
|
||||
setLocationHref: vi.fn(),
|
||||
},
|
||||
loadAnimation: vi.fn(),
|
||||
}));
|
||||
Reference in New Issue
Block a user