d3单元测试过渡

jus*_*ris 6 animation unit-testing timer jasmine d3.js

我有一个构建的图表d3,它出现了转换,我需要在所有转换结束时测试图表.我jasmine用于单元测试.怎么做?我找到方法d3.timer.flush(),但它只跳过第一帧,但我想跳过所有动画并立即查看最终结果并对其进行一些断言.

rbu*_*rbu 13

如果在刷新期间模拟其时间戳确定,则可以通过一次调用D3的计时器刷新来直接同步执行转换到最终状态:

模拟转换的另一种方法是直接同步执行它们的最终状态.

使用D3.js v4,执行:

function flushAllD3Transitions() {
    var now = performance.now;
    performance.now = function() { return Infinity; };
    d3.timerFlush();
    performance.now = now;
 }
Run Code Online (Sandbox Code Playgroud)

使用D3.js v3和之前的版本,执行:

function flushAllD3Transitions() {
    var now = Date.now;
    Date.now = function() { return Infinity; };
    d3.timer.flush();
    Date.now = now;
 }
Run Code Online (Sandbox Code Playgroud)

完全模拟转换(以避免计算开销)为我产生了混合结果,例如,如果您的最终状态是使用a创建的attrTween,则需要执行.

另见我们在d3 issue 1789SO 14443724中的讨论.