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
相关产品推荐
相关产品推荐

