gpt4 book ai didi

javascript - jest.spyOn 不适用于解构函数

转载 作者:行者123 更新时间:2023-12-02 22:35:06 25 4
gpt4 key购买 nike

为什么 jest.spyOn 不能使用在测试现场解构的解构函数?

以下测试将失败:

export const Funcs = {
foo: () => {
return 'foo';
}
};

const { foo } = Funcs;

test('should pass', () => {
const spy = jest.spyOn(Funcs, 'foo');
foo();
expect(spy).toHaveBeenCalled();
});

但是,如果我们将解构移到测试中,它就会起作用:

test('should pass', () => {
const spy = jest.spyOn(Funcs, 'foo');
const { foo } = Funcs;
foo();
expect(spy).toHaveBeenCalled();
});

最佳答案

当您调用 jest.spyOn(Funcs, 'foo'); 时,Funcs 对象会被修改为具有新的 foo 属性。您的第一个代码示例是在模拟 Funcs.foo 之前访问它,因此 const foo 指的是真正的函数。您的第二个代码示例是在模拟后访问 Funcs.foo,因此您指向模拟函数。

如果你去掉 Jest 和解构的使用,下面是你正在做的事情的说明。修改前访问:

const example = {
value: 1
}
const val = example.value;
example.value = 2;
console.log(val);

访问前修改:

const example = {
value: 1
}
example.value = 2;
const val = example.value;
console.log(val);

关于javascript - jest.spyOn 不适用于解构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58768392/

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