You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Dojo2项目导入snapsvg-cjs后Intern测试用例执行后卡住

解决Dojo2项目导入snapsvg-cjs后Intern测试执行完卡住的问题

我之前也碰到过类似的情况,结合Dojo2的测试机制和snapsvg-cjs的特性,大概率是以下几个原因导致测试进程无法正常退出,你可以逐一排查:

  • 清理snapsvg残留的DOM与实例
    snapsvg-cjs会直接操作DOM创建SVG元素,测试结束后如果没有手动清理这些元素或实例,可能会残留事件监听或未释放的资源,导致Intern无法结束进程。你可以在测试的afterEach或after钩子中添加清理逻辑:

    import Snap from 'snapsvg-cjs';
    
    afterEach(() => {
      // 移除页面上所有Snap创建的SVG元素
      document.querySelectorAll('svg').forEach(el => el.remove());
      // 如果有全局保存的Snap实例,清空并销毁
      if ((window as any).snapInstance) {
        (window as any).snapInstance.clear();
        delete (window as any).snapInstance;
      }
    });
    
  • 检查Intern的浏览器环境配置
    如果是在浏览器环境下运行测试,snapsvg-cjs可能会创建后台定时器或未处理的异步任务,被浏览器的节流机制卡住。你可以修改Intern的配置文件(比如intern.json),禁用定时器节流:

    {
      "capabilities": {
        "alwaysMatch": {
          "goog:chromeOptions": {
            "args": ["--disable-background-timer-throttling"]
          }
        }
      }
    }
    
  • 确认TypeScript导入与类型定义是否正确
    错误的导入方式或缺失的类型定义可能导致隐性异常,让测试进程静默卡住。你可以尝试切换到CommonJS风格的导入,或者安装对应的类型包:

    // 改用require导入
    const Snap = require('snapsvg-cjs');
    

    安装类型定义:

    npm install @types/snapsvg-cjs --save-dev
    
  • 排查未处理的异步操作
    如果你的测试中使用了snapsvg的异步API(比如加载外部SVG资源),未正确等待异步操作完成会导致进程挂起。确保所有异步逻辑都用async/await包裹,保证测试完成后没有残留的Promise:

    test('测试Snap异步加载', async () => {
      const svg = Snap(200, 200);
      // 等待图片加载完成
      const imageElement = await svg.image('/test.svg');
      // 执行断言逻辑
      assert.isNotNull(imageElement);
    });
    

内容的提问来源于stack exchange,提问作者Sagar Kharche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:13:40