作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个对象,我想使用 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/
Jasmine 的文档非常简短;通常就足够了。不总是。 我想知道 toBeCloseTo 的第二个参数到底是什么。官方引用仅显示: it("The 'toBeCloseTo' matcher is f
我有两个对象,我想使用 Jest 测试递归相等性。这很简单: test('should be recursively equal', () => { const test = { x: 0, y:
我正在尝试在 Jest 中使用 toBeCloseTo 来测试 float : expect(value).toBeCloseTo(0.01491, 5); 但是当我运行测试时,我看到了这个结果: P
我正在测试一个对象是否匹配一组字段,但其中一个是 float ,我需要使用 .toBeCloseTo .如何在一个 expect 内完成? expect(foo).toMatchObject({
我是一名优秀的程序员,十分优秀!