前言
Jest 是一个基于 JavaScript 的测试框架,它提供了一种简单、快速且可靠的方式来测试你的应用程序。在使用 Jest 进行测试时,我们经常会遇到一些断言错误,这些错误可能会让你感到头疼。本文将介绍一些常见的 Jest 断言错误,并提供解决方法,帮助你更好地使用 Jest 进行测试。
常见断言错误
1. expect(received).toBe(expected)
这是 Jest 中最常用的断言之一,它用于比较两个值是否相等。但是,有时候你会遇到以下错误:
expect(received).toBe(expected) // Object.is equality Expected: "foo" Received: "foo"
这个错误通常是由于比较两个对象时出现的。例如:
const obj1 = { foo: 'bar' }; const obj2 = { foo: 'bar' }; expect(obj1).toBe(obj2);
由于 obj1 和 obj2 是两个不同的对象,它们的引用地址不同,因此 expect(obj1).toBe(obj2) 会报错。正确的方式是使用 toEqual 方法:
expect(obj1).toEqual(obj2);
2. expect(fn).toThrow()
这个断言用于测试一个函数是否会抛出异常。但是,有时候你会遇到以下错误:
expect(received).toThrow() Expected received function to throw an exception. Received function did not throw.
这个错误通常是由于函数没有抛出异常造成的。例如:
function add(a, b) { return a + b; } expect(() => add(1, 2)).toThrow();
由于 add 函数没有抛出异常,expect(() => add(1, 2)).toThrow() 会报错。正确的方式是在 add 函数中添加一个抛出异常的语句:
function add(a, b) { if (typeof a !== 'number' || typeof b !== 'number') { throw new Error('Invalid arguments'); } return a + b; } expect(() => add(1, '2')).toThrow();
3. expect(array).toContain(item)
这个断言用于测试一个数组是否包含指定的元素。但是,有时候你会遇到以下错误:
expect(array).toContain(item) Expected array: [ 1, 2, 3 ] To contain: 4
这个错误通常是由于数组中没有包含指定的元素造成的。例如:
const arr = [1, 2, 3]; expect(arr).toContain(4);
由于 arr 数组中没有包含 4 这个元素,expect(arr).toContain(4) 会报错。正确的方式是修改数组中的元素:
const arr = [1, 2, 3]; arr.push(4); expect(arr).toContain(4);
解决方法
1. 使用 toEqual 方法
当你需要比较两个对象时,应该使用 toEqual 方法而不是 toBe 方法。因为 toEqual 方法会递归比较对象的属性值,而 toBe 方法只会比较对象的引用地址。
2. 添加异常处理语句
当你需要测试一个函数是否会抛出异常时,应该在函数中添加一个抛出异常的语句。这样可以确保函数在测试时一定会抛出异常。
3. 修改数组中的元素
当你需要测试一个数组是否包含指定的元素时,应该先修改数组中的元素,确保数组中包含指定的元素。
总结
在使用 Jest 进行测试时,我们经常会遇到一些断言错误。本文介绍了一些常见的 Jest 断言错误,并提供了解决方法。希望本文能帮助你更好地使用 Jest 进行测试。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65065b2595b1f8cacd247a68