fix: 重构所有定时器测试为 Jest fake timers,彻底解决 CI Run tests 卡死
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:
+30
-20
@@ -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 事件立即保存', () => {
|
||||
|
||||
Reference in New Issue
Block a user