IT干货网

unit-testing之单元测试中的 d3 转换

zhengyun_ustc 2025年05月04日 编程设计 349 0

我有一个由 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 .


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!