Files
EasyFlow/easyflow-ui-admin/packages/tinyflow-vue/src/dataSync.test.ts
陈子默 aedefe6b5e perf: 优化智能体与工作流幕布渲染性能
- 分阶段加载智能体配置并按需缓存 MCP 工具

- 合并画布状态更新与节点尺寸监听,启用大图可视区域渲染和静态连线

- 隔离 Tinyflow Store 实例并补充数据同步与回归测试
2026-07-27 18:27:01 +08:00

77 lines
2.1 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { createTinyflowDataSync } from './dataSync';
describe('createTinyflowDataSync', () => {
it('克隆真正的外部数据并跳过相同内容', () => {
const sync = createTinyflowDataSync();
const data = {
edges: [],
nodes: [{ data: { title: '开始' }, id: 'start', position: { x: 0, y: 0 } }],
};
const cloned = sync.cloneExternalDataIfChanged(data);
expect(cloned).toEqual(data);
expect(cloned).not.toBe(data);
expect(sync.cloneExternalDataIfChanged(data)).toBeNull();
});
it('跳过原生画布回传后由父组件形成的属性回声', () => {
const sync = createTinyflowDataSync();
const emitted = {
edges: [],
nodes: [{ data: { title: '开始' }, id: 'start', position: { x: 12, y: 8 } }],
viewport: { x: 20, y: 30, zoom: 1 },
};
sync.markNativeData(emitted);
expect(
sync.cloneExternalDataIfChanged(structuredClone(emitted)),
).toBeNull();
});
it('原生回传后仍应用内容不同的外部更新', () => {
const sync = createTinyflowDataSync();
const emitted = {
edges: [],
nodes: [{ data: { title: '开始' }, id: 'start', position: { x: 12, y: 8 } }],
};
sync.markNativeData(emitted);
const external = {
...emitted,
nodes: [
{
...emitted.nodes[0],
data: { title: '已更新' },
},
],
};
expect(sync.cloneExternalDataIfChanged(external)).toEqual(external);
});
it('画布变化后允许重新应用曾经加载过的外部版本', () => {
const sync = createTinyflowDataSync();
const initial = {
edges: [],
nodes: [{ data: { title: '初始' }, id: 'start', position: { x: 0, y: 0 } }],
};
expect(sync.cloneExternalDataIfChanged(initial)).toEqual(initial);
sync.markNativeData({
...initial,
nodes: [
{
...initial.nodes[0],
position: { x: 120, y: 80 },
},
],
});
expect(sync.cloneExternalDataIfChanged(initial)).toEqual(initial);
});
});