Jest Matcher 错误:收到的值必须是承诺或返回承诺的函数

作者:编程家 分类: typescript 时间:2025-05-07

Jest是一种常用的JavaScript测试框架,用于编写和运行单元测试。它提供了丰富的断言库和匹配器,用于验证代码的正确性。然而,有时候在使用Jest Matcher时会遇到错误,如收到的值必须是承诺或返回承诺的函数。本文将介绍这个错误的原因,并提供解决方案。

在开始之前,让我们先了解一下Jest Matcher的基本概念。Jest Matcher是一种用于断言测试结果的函数,它可以与Jest的`expect`函数一起使用。它接收一个实际值和一个期望值,并根据预定义的规则来判断它们是否相等。如果断言失败,Jest会抛出一个错误。

什么是Promise?

在讨论Jest Matcher错误之前,我们首先需要了解Promise的概念。Promise是JavaScript中处理异步操作的一种方式。它代表了一个异步操作的最终完成或失败,并返回一个值。Promise可以用于处理网络请求、定时器等需要等待结果的操作。

为什么会出现收到的值必须是承诺或返回承诺的函数的错误?

在某些情况下,我们可能会在测试中使用异步操作,例如测试一个返回Promise的函数。在这种情况下,我们需要使用Jest提供的异步匹配器来处理异步断言。然而,当我们错误地在Matcher中传递了一个非Promise的值或函数时,就会出现收到的值必须是承诺或返回承诺的函数的错误。

如何解决这个错误?

要解决收到的值必须是承诺或返回承诺的函数的错误,我们需要确保在Matcher中传递的值是一个Promise或返回Promise的函数。下面是一个示例代码,演示了如何正确地使用异步Matcher:

javascript

test('异步匹配器测试', () => {

// 返回一个Promise的异步函数

const asyncFunction = () => {

return new Promise((resolve, reject) => {

// 模拟异步操作

setTimeout(() => {

resolve('成功');

}, 1000);

});

};

return expect(asyncFunction()).resolves.toBe('成功');

});

在这个示例中,我们定义了一个返回Promise的异步函数`asyncFunction`。在测试中,我们使用`expect`函数来断言这个异步函数的返回值是否为'成功'。通过在断言后面添加`.resolves.toBe('成功')`,我们告诉Jest在异步操作完成后进行断言。

在使用Jest Matcher时,收到的值必须是承诺或返回承诺的函数的错误是常见的错误之一。这个错误的原因是在Matcher中传递了一个非Promise的值或函数。为了解决这个错误,我们需要确保在Matcher中传递的值是一个Promise或返回Promise的函数。这样,我们就可以正确地处理异步断言并进行单元测试。