// 注意:这里不能直接require原始的src文件,而要使用build后的文件,因为web worker代码是通过worker-loader内联进来的 import G6 from '../../../dist/g6.min'; import dataset from './data'; import { mathEqual } from './util'; const data = dataset.data; const div = document.createElement('div'); div.id = 'layout-web-worker'; document.body.appendChild(div); // jest.setTimeout(10000) describe('layout using web worker', function () { it('change layout', function (done) { const node = data.nodes[0]; const graph = new G6.Graph({ container: div, layout: { type: 'circular', // use web worker to layout workerEnabled: true, }, width: 500, height: 500, defaultNode: { size: 10 }, }); graph.data(data); // 下面的 graph.updateLayout又会触发一次afterLayout,为了避免这里的 event handler重复执行,用了 graph.once graph.once('afterlayout', () => { expect(mathEqual(node.x, 500)).toEqual(true); expect(mathEqual(node.y, 250)).toEqual(true); callback(); }); graph.render(); setTimeout(() => { callback(); }, 1000); function callback() { let count = 0; let ended = false; // 只执行一次 graph.once('afterlayout', () => { expect(node.x).not.toEqual(undefined); expect(node.y).not.toEqual(undefined); expect(count >= 1).toEqual(true); expect(ended).toEqual(true); graph.destroy(); done(); }); graph.updateLayout({ type: 'force', onTick() { count++; expect(node.x).not.toEqual(undefined); expect(node.y).not.toEqual(undefined); }, onLayoutEnd() { ended = true; }, // use web worker to layout workerEnabled: true, }); } }); });