gpt4 book ai didi

javascript - 使用 Jest 测试化简器文件中的函数

转载 作者:行者123 更新时间:2023-12-03 00:27:23 25 4
gpt4 key购买 nike

我在使用 Jest 测试简单函数时遇到问题。

export const removeId = (obj, omitId) => {
Object.keys(obj).reduce((object, key) => {
if (key !== omitId) {
object[key] = obj[key];
}
return object;
}, {});
};

当我将此函数导入到我的测试文件并运行时:

  expect(removeId(state, 0)).toEqual(expected);

期望值未定义。

但是如果我在测试中声明该函数并运行如下:

const removeId = Object.keys(state).reduce((object, key) => {
if (key !== '2') {
object[key] = state[key];
}
return object;
}, {});
expect(removeId).toEqual(expected);

工作正常。

最佳答案

Taplar 在评论中已经提供了正确的答案,但我有一种感觉,您的问题来自于对 Object.keys 正在做什么的误解。如果这不正确并且这只是一个拼写错误,请随意忽略本文的其余部分。首先,这是应该有效的正确代码:

export const removeId = (obj, omitId) => {
return Object.keys(obj).reduce((object, key) => {
if (key !== omitId) {
object[key] = obj[key];
}
return object;
}, {});
};

但是为什么这个能起作用,为什么以前不起作用呢?我有一种感觉,你放了返回对象,尽管这已经足够了。这还不够的原因是,reduce 函数实际上采用了闭包,这意味着它是一个完全不同的函数。为了理解这一点,我们可以像这样分解代码:

export const removeId = (obj, omitId) => {
const innerFunction = (object, key) => {
if (key !== omitId) {
object[key] = obj[key];
}
return object;
};

Object.keys(obj).reduce(innerFunction, {});
};

现在请注意带有 reduce 函数的行基本上只是一个链式语句。我们正在调用它,但我们没有对结果做任何事情。

换个 Angular 来看:

Object.keys(obj) -> returns an array, the contents of which are the
keys of the object that you put into it

array.reduce() -> calls a function for every element of the array. It returns
an object built from that function

因此,为了获得从 removeId 函数发回的 reduce 函数的结果,您需要返回它,这就是顶部代码的作用.

希望这是有道理的。

关于javascript - 使用 Jest 测试化简器文件中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54027577/

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