我有一个由 d3 构建的图表并且随着转换出现,我需要在所有转换结束时测试图表。我用 jasmine用于单元测试。怎么做?
我找方法d3.timer.flush() ,但它只跳过第一帧,但我想跳过所有动画并立即查看最终结果并对其进行一些断言。
请您参考如下方法:
如果您在刷新期间模拟其时间戳确定,您可以通过一次调用 D3 的计时器刷新直接同步执行转换到其最终状态,如下所示:
模拟转换的另一种方法是直接同步执行它们到它们的最终状态。
使用 D3.js v4,请执行以下操作:
function flushAllD3Transitions() {
var now = performance.now;
performance.now = function() { return Infinity; };
d3.timerFlush();
performance.now = now;
}
使用 D3.js v3 及之前版本,请执行以下操作:
function flushAllD3Transitions() {
var now = Date.now;
Date.now = function() { return Infinity; };
d3.timer.flush();
Date.now = now;
}
完全模拟转换(以避免计算开销)对我来说产生了混合结果,例如,如果您的最终状态是使用
attrTween 创建的,需要执行。
另见我们在 d3 issue 1789 中的讨论和 SO 14443724 .




