gpt4 book ai didi

javascript - 开 Jest 如何修改每个单元测试的全局对象值

转载 作者:行者123 更新时间:2023-12-02 23:10:58 26 4
gpt4 key购买 nike

我正在编写需要定义 window.location.href 的单元测试第一个单元测试创​​建如下

  describe('myMethod()', () => {
beforeEach(() => {
global.window = Object.create(window);
Object.defineProperty(window, 'location', {
configurable: true,
value: {
href: 'http://localhost:7777/mainPoint?param=val1',
},
});
});

it('should call with val1', () => {
myMethod();
expect(myService.detectURLCall).toHaveBeenCalledWith('http://localhost:7777/mainPoint?param=val1'); // passes
});

describe('mySecondMethod()', () => {
beforeEach(() => {
global.window = Object.create(window);
Object.defineProperty(window, 'location', {
configurable: true,
value: {
href: 'http://localhost:7777/mainPoint?param=val2',
},
});
});

it('should call with val2', () => {
myMethod();
expect(myService.detectURLCall).toHaveBeenCalledWith('http://localhost:7777/mainPoint?param=val2'); // fails, the received call was ending with =val1
})

我知道 Jest 单元测试是并行运行的,我尝试在 myMethod() 测试套件内的 afterEach() 中执行clearMocks(),但它没有帮助,我的第二个测试套件仍然检测我们在第一个测试套件中定义的内容..

最佳答案

以下内容似乎可以很好地解决您的问题:

https://github.com/simon360/jest-environment-jsdom-global(建立在 jest 的内置 jest-environment-jsdom 之上,并且有一个很好的直接相关的自述文件)

这可以确保每个文件都有一个已定义的环境,正如您所说,这肯定是根本问题。

关于javascript - 开 Jest 如何修改每个单元测试的全局对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363772/

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