fix: 重构所有定时器测试为 Jest fake timers,彻底解决 CI Run tests 卡死
CI / test (20.x) (push) Canceled after 0s
CI / test (22.x) (push) Canceled after 0s
CI / test (24.x) (push) Canceled after 0s
CI / test (18.x) (push) Canceled after 18m34s

tests/utils.test.ts: debounce/throttle/sleep 使用 useFakeTimers + advanceTimersByTime; tests/core.test.ts: 历史栈防抖合并测试用 fake timers 替代 400ms setTimeout; tests/plugins.test.ts: autoSave 三个测试用 fake timers 替代 setTimeout/done; README.md: 更新测试徽章为 353 passed; site/index.html, site/demo.html: 更新测试数为 353
This commit is contained in:
2026-07-28 21:18:26 +08:00
parent b7a3da8176
commit cf0bc45055
6 changed files with 87 additions and 72 deletions
+30 -20
View File
@@ -65,15 +65,16 @@ describe('autoSave 插件', () => {
expect(key).toContain('me-draft-');
});
test('change 后内容最终写入 localStorage', (done) => {
test('change 后内容最终写入 localStorage', () => {
jest.useFakeTimers();
ed.setValue('autosaved content');
// autoSave 默认 delay 1000ms,等 1100ms
setTimeout(() => {
const key = ed.getDraftKey();
const stored = localStorage.getItem(key);
expect(stored).toBe('autosaved content');
done();
}, 1150);
const key = ed.getDraftKey();
// autoSave 默认 delay 1000ms,未到时间不应保存
expect(localStorage.getItem(key)).toBeNull();
// 推进时间触发 save
jest.advanceTimersByTime(1000);
expect(localStorage.getItem(key)).toBe('autosaved content');
jest.useRealTimers();
});
test('clearDraft 清除存储', () => {
@@ -105,16 +106,19 @@ describe('autoSave 自定义配置', () => {
ed.destroy();
});
test('自定义 delay 生效', (done) => {
test('自定义 delay 生效', () => {
jest.useFakeTimers();
localStorage.clear();
const ed = makeEditor();
ed.use(presetPlugins.autoSave, { delay: 30 });
ed.setValue('fast');
setTimeout(() => {
expect(localStorage.getItem(ed.getDraftKey())).toBe('fast');
ed.destroy();
done();
}, 60);
// 未到时间不应保存
expect(localStorage.getItem(ed.getDraftKey())).toBeNull();
// 推进 30ms 触发 save
jest.advanceTimersByTime(30);
expect(localStorage.getItem(ed.getDraftKey())).toBe('fast');
ed.destroy();
jest.useRealTimers();
});
});
@@ -386,14 +390,20 @@ describe('autoSave 插件 - 边界', () => {
expect(ed.clearDraft()).toBe(ed);
});
test('保存触发 autosave 事件', (done) => {
test('保存触发 autosave 事件', () => {
jest.useFakeTimers();
let eventData = null;
ed.use(presetPlugins.autoSave, { key: 'evt-draft', delay: 10 });
ed.on('autosave', (data) => {
expect(data.key).toBe('evt-draft');
expect(data.value).toBe('triggered');
done();
});
ed.on('autosave', (data) => { eventData = data; });
ed.setValue('triggered');
// 未到时间不应触发事件
expect(eventData).toBeNull();
// 推进 10ms 触发 save 并 emit 'autosave'
jest.advanceTimersByTime(10);
expect(eventData).not.toBeNull();
expect(eventData.key).toBe('evt-draft');
expect(eventData.value).toBe('triggered');
jest.useRealTimers();
});
test('blur 事件立即保存', () => {