gpt4 book ai didi

javascript - toBeCloseTo 等效于 Jest 中的递归相等性测试

转载 作者:行者123 更新时间:2023-11-29 17:53:45 28 4
gpt4 key购买 nike

我有两个对象,我想使用 Jest 测试递归相等性。这很简单:

test('should be recursively equal', () => {
const test = { x: 0, y: 0 }
const expected = { x: 0, y: 0 }

expect(test).toEqual(expected)
})

但在某些情况下会出现问题;如您所知,JavaScript 计算 float 非常糟糕,因此有时测试会变成以下内容:

test('should be recursively equal', () => {
const test = { x: 0.00000000001, y: 0 }
const expected = { x: 0, y: 0 }

expect(test).toEqual(expected)
})

它不再起作用了。 Jest 提供了 toBeCloseTo 测试,它以数字和精度作为参数,但我想知道递归等式是否有等效项(类似于 toEqualCloseTo)。

最佳答案

我最终得到了以下解决方案:

expect.extend({
toEqualCloseTo(received, expected, precision = 3) {
const { getType } = this.utils

function round(obj) {
switch (getType(obj)) {
case 'array':
return obj.map(round)

case 'object':
return Object.keys(obj).reduce((acc, key) => {
acc[key] = round(obj[key])
return acc
}, {})

case 'number':
return +obj.toFixed(precision)

default:
return obj
}
}

expect(round(received)).toEqual(expected)

return { pass: true }
},
})

关于javascript - toBeCloseTo 等效于 Jest 中的递归相等性测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41060258/

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