gpt4 book ai didi

unit-testing - 如何使用 Jest 监视 Vuejs 应用程序上的 window.location.assign?

转载 作者:行者123 更新时间:2023-12-04 05:00:46 25 4
gpt4 key购买 nike

我需要为我的单元测试 spyOn window.location.assign 。但是当我运行测试时,我收到了这个错误。
Cannot spy the assign property because it is not a function; undefined given instead
这是我的代码:

jest.spyOn(window.location, "assign");

任何人都可以就这种情况给我一些提示或解决方案吗?

最佳答案

自 Jest v25(使用较新版本的 JSDOM)以来,您将收到以下错误:

TypeError: Cannot assign to read only property 'assign' of object '[object Location]'

顺便说一下,这不是 Jest/JSDOM 错误。这是正常的浏览器行为,JSDOM 试图表现得像一个真正的浏览器。

A 解决方法 是删除位置对象,创建自己的位置对象,并在运行测试后将其重置为原始位置对象:
describe('My awesome unit test', () => {
// we need to save the original object for later to not affect tests from other files
const realLocation = global.location

beforeAll(() => {
delete global.location
global.location = { assign: jest.fn() }
// or even like this if you are also using other location properties (or if TypeScript complains):
// global.location = { ...realLocation, assign: jest.fn() }
})

afterAll(() => {
global.location = realLocation
})

it('should call location.assign', () => {
// ...your test code

expect(global.location.assign).toHaveBeenCalled()

// or even better:
// expect(global.location.assign).toHaveBeenCalledWith('/my_link')
})
})

关于unit-testing - 如何使用 Jest 监视 Vuejs 应用程序上的 window.location.assign?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54140514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com