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

Vitest+jsdom中Stub URL出现导航未实现错误的解决办法

解决jsdom+Vitest中Mock URL.createObjectURL时的导航错误

你遇到的问题是因为直接用vi.stubGlobal替换了整个URL对象,覆盖了jsdom原本实现的URL相关功能,导致内部依赖的导航逻辑找不到对应实现,才抛出这个错误。可以用以下两种方法解决:

  • 方法一:单独Mock目标方法(推荐)
    用vi.spyOn只mockcreateObjectURL方法,保留URL的其他原生实现:

    vi.spyOn(URL, 'createObjectURL').mockImplementation(() => 'mock-url');
    

    测试完成后还可以用.mockRestore()恢复原方法,避免影响其他测试:

    afterEach(() => {
      URL.createObjectURL.mockRestore();
    });
    
  • 方法二:扩展原URL对象替换单个方法
    如果必须用vi.stubGlobal,可以展开原URL对象的所有属性,只覆盖createObjectURL:

    vi.stubGlobal('URL', {
      ...URL,
      createObjectURL: vi.fn(() => 'mock-url')
    });
    

这两种方式都不会破坏jsdom原本的URL功能,自然就不会出现导航相关的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:22:02