/** @vitest-environment jsdom */ import { describe, it, expect, vi, beforeEach } from 'vitest'; import { EffectEngine } from '../../apps/desktop/src/renderer/features/effects/effect-engine'; // stub requestAnimationFrame beforeEach(() => { globalThis.requestAnimationFrame = ((cb: FrameRequestCallback) => { return 0 as any; }) as any; globalThis.cancelAnimationFrame = (() => {}) as any; }); describe('M6 EffectEngine 配置与降级 (FR-A11)', () => { it('setType/setColor 改变状态', () => { const e = new EffectEngine(); e.setType('particle'); e.setColor('#ff0000'); e.disable(); // disable 后 type 为 off expect(e.isActive()).toBe(false); }); it('attach 到 canvas 不抛错', () => { const canvas = document.createElement('canvas'); document.body.appendChild(canvas); const e = new EffectEngine(); expect(() => e.attach(canvas)).not.toThrow(); e.detach(); }); it('detach 后 isActive 为 false', () => { const canvas = document.createElement('canvas'); const e = new EffectEngine(); e.attach(canvas); e.detach(); expect(e.isActive()).toBe(false); }); });