首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

这个错误是由Jest测试框架的Matcher引起的,它要求被测试的值必须是一个Promise对象或返回Promise对象的函数。

在Jest中,Matcher用于对测试结果进行断言和比较。当我们使用某个Matcher对一个值进行测试时,Jest会检查该值是否满足Matcher的要求。如果被测试的值不是一个Promise对象或返回Promise对象的函数,就会触发这个错误。

解决这个错误的方法有两种:

  1. 将被测试的值包装成Promise对象:如果被测试的值不是一个Promise对象,我们可以使用Promise.resolve()方法将其包装成一个Promise对象。例如:
代码语言:txt
复制
test('测试异步函数', () => {
  return expect(Promise.resolve(5)).resolves.toBe(5);
});
  1. 将被测试的值封装成返回Promise对象的函数:如果被测试的值是一个普通的函数或方法,我们可以将其封装成一个返回Promise对象的函数。例如:
代码语言:txt
复制
function fetchData() {
  return new Promise((resolve, reject) => {
    // 异步操作
    resolve('data');
  });
}

test('测试异步函数', () => {
  return expect(fetchData()).resolves.toBe('data');
});

在这个例子中,fetchData()函数返回一个Promise对象,我们可以使用expect().resolves匹配器来测试该Promise对象的结果。

总结一下,Jest Matcher错误"收到的值必须是promise或返回promise的函数"是由于被测试的值不满足Jest Matcher的要求所引起的。我们可以通过将被测试的值包装成Promise对象或封装成返回Promise对象的函数来解决这个错误。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数(云原生、服务器运维):https://cloud.tencent.com/product/scf
  • 腾讯云数据库(数据库):https://cloud.tencent.com/product/cdb
  • 腾讯云CDN(网络通信):https://cloud.tencent.com/product/cdn
  • 腾讯云安全产品(网络安全):https://cloud.tencent.com/solution/security
  • 腾讯云音视频处理(音视频、多媒体处理):https://cloud.tencent.com/product/mps
  • 腾讯云人工智能(人工智能):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(物联网):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动开发):https://cloud.tencent.com/product/mobdev
  • 腾讯云对象存储(存储):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(区块链):https://cloud.tencent.com/product/baas
  • 腾讯云游戏多媒体引擎(元宇宙):https://cloud.tencent.com/product/gme
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • JavaScript 测试系列实战(三):使用 Mock 模拟模块并处理组件交互

    axios 模块提供了一个 get 函数,并且会返回一个 Promise,包含预先设定假数据。...首先通过 jest.spyOn,我们便可以监听一个函数使用情况,然后使用配套 toBeCalled Matcher 来判断该函数是否被调用。整体代码十分简洁,同时也保持了很好可读性。...postSpy.mock.results post 函数发送结果数组,通过使用它,我们可以得到返回 promise,我们可以从 value 属性中取到这个 promise。...从测试返回 promise 确保 Jest 等待其异步方法执行结束一种方法。 小结 在本文中,我们介绍了 mock 模块,并将其用于伪造API调用。...我们可以通过阅读错误消息找出原因: 无效 Hooks 调用, Hooks 只能在函数式组件函数体内部调用。

    4.8K20

    异步函数异常处理及测试方法

    有基本了解 安装 Node.Js 和 Jest 如何从 Javascript 常规函数中抛出错误 使用异常而不是返回码(清洁代码)。...这是对它测试(使用Jest): ? 也可以从 ES6 类中抛出错误。在 Javascript 中编写类时,我总会在构造函数中输入意外。下面一个例子: ? 以下该类测试: ?...安排明明白白! 所以无论异常是从常规函数还是从类构造函数从方法)抛出,一切都会按照预期工作。 但是如果我想从异步函数中抛出错误怎么办? 我可以在测试中使用assert.throws吗?...看把你能,来抓我啊 从严格意义上讲异步函数和异步方法不会抛出错误。异步函数和异步方法总是返回一个Promise,无论它已完成还是被拒绝,你必须附上 then() 和 catch(),无论如何。...总结 最后总结一下: 从异步函数抛出错误不会是“普通异常”。 异步函数和异步方法总是返回一个Promise,无论已解决还是被拒绝。 要拦截异步函数异常,必须使用catch()。

    3K30

    Vue 应用单元测试策略与实践 02 - 单元测试基础

    ,一般来说就是调用相应模块执行对应函数方法 Then Assert 断言,这时需要借助就是 Matchers 能力,Jest 还可以扩展自己 Matcher 在 expect 后面的 toBe...如果你希望单元测试所测试 Order 模块独立,那么你就不想直接使用真正 Product Customer Class,因为 Customer Class 错误会直接导致 Order Class...}; }); }); 我们可以看到 jest.mock() 方法中第二个参数一个函数,那么我们就可以完全接管整个 ..../sound-player 这个文件当中 export 出来,而被 Mock 之后我们测试就可以使用 Mock 所返回数据方法,从而保证模块所返回内容我们所期望。...但也有一个不错点,可以通过 Promise .resolve() 和 .reject() 方法使测试分别验证正常异常情况。

    2.2K20

    【C++】C++ 引用详解 ③ ( 函数返回不能 “ 局部变量 “ 引用指针 | 函数 “ 局部变量 “ 引用指针做函数返回无意义 )

    一、函数返回不能 " 局部变量 " 引用指针 1、引用通常做右 之前使用 引用 时 , 都是作为 右 使用 , 引用只在 声明 同时 进行初始化时 , 才作为左 , // 定义变量 a...2、函数返回特点 函数 返回 几乎很少 引用 指针 ; 函数 计算结果 经常是借用 参数中 地址 / 引用 进行返回 , 函数 返回 一般返回一个 int 类型 , 如果...int 为 0 就是成功 , int 为其它数值 , 就是错误码 ; 3、函数 " 局部变量 " 引用指针做函数返回无意义 如果 想要 使用 引用 指针 作 函数计算结果 , 一般都是将..., 返回 局部变量 地址 / 引用 无意义 , 一般 函数返回一个 int , 表示 该函数 是否执行成功 , 如果执行失败 , 返回错误码 ( 在哪一步执行失败 ) ; ----..., 该 指针 局部变量 指针 ; 上述两个函数无意义 , 获取到 函数 返回 " 局部变量 " 引用 指针 , 然后获取地址 , 发现获取都是随机 , 都是无意义 ; num21

    48820

    那些年错过React组件单元测试(上)

    在单元测试中,我们可能并不需要关心内部调用方法执行过程和结果,只想知道它是否被正确调用即可,甚至会指定该函数返回。这个时候,mock意义就很大了。...我们在测试中也主要是用到了mock函数提供以下三种特性: 捕获函数调用情况 设置函数返回 改变函数内部实现 下面,我将分别介绍这三种方法以及他们在实际测试中应用。...jest.fn() jest.fn()创建mock函数最简单方式,如果没有定义函数内部实现,jest.fn()会返回undefined作为返回。...expect(mockFn).toHaveBeenCalledWith('厦门','青岛','三亚'); }) jest.fn()所创建mock函数还可以设置返回,定义内部实现返回Promise...实际上,jest.spyOn()jest.fn()语法糖,它创建了一个和被spy函数具有相同内部代码mock函数。 Snapshot 快照测试 所谓snapshot,即快照也。

    5K20

    前端单元测试那些事

    API,分别是jest.fn()、jest.spyOn()、jest.mock() jest.fn() - 创建Mock函数最简单方式,如果没有定义函数内部实现,jest.fn()会返回undefined...作为返回,当然你也可以给他设置返回、定义内部实现返回Promise对象,如下例: // 断言mockFn执行后返回为name it('jest.fn()返回', () => { let...(2, 2)).toBe(4); }) //jest.fn()返回Promise对象 test('jest.fn()返回Promise', async () => { let mockFn = jest.fn...对象执行了回调函数 注:有时候会存在一种情况,在同个组件中调用同个方法,只是返回不同,我们可能要对它进行多次不同mock,这时候需要在beforeEach使用restoreAllMocks方法重置状态...mock目的: 设置函数返回 获取获函数调用情况 改变原本函数内部实现 4. ️

    4.3K40

    单元测试

    代码信心体现 测试可以确保得到预期结果 作为现有代码行为描述 促使开发者写可测试代码,可测试代码可读性会更高 如果依赖组件有修改,受影响组件能在测试中发现错误 测试内容 什么细节?...coverageDirectory: '/tests/coverage-jest', // 非必须配置 // transformIgnorePatterns这个配置项配置将一些文件忽略...@testing-library/jest-dom 一个用于增强 Jest 测试框架库,它提供了一组用于 DOM 断言定制化匹配器和工具函数。...,其返回包含了Form组件数据管理相关方法。...这样可以确保每个测试用例都在相同初始状态下运行,并且没有残留状态影响。 在每个测试用例之后使用 afterEach 函数 afterAll 函数来清理测试环境。

    27610

    前端单元测试之Jest

    在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中方法。 集成测试,也叫组装测试联合测试。...这里列举4个主要生命周期勾子: afterAll(fn, timeout): 当前文件中所有测试执行完成后执行 fn, 如果 fn promisejest 会等待timeout 毫秒,默认 5000...Mock函数通常会提供以下三种特性: 捕获函数调用情况; 设置函数返回; 改变函数内部实现; jest.fn() jest.fn()创建Mock函数最简单方式,如果没有定义函数内部实现,jest.fn...()会返回undefined作为返回。...Jest异步测试主要分为3种: done函数 return promise async/await done例子如下: function fetchData(call) { setTimeout

    2.7K20

    vue router 4 源码篇:路由诞生——createRouter原理探索

    这些函数作用,无非就是围绕着上面说到matcher增删改查操作,例如,getRoutes用于返回所有matcher,removeRoute则是删除某个指定matcher。。。...createRouterMatcher函数一共286行,初始化matcher入口在代码340行,调用方法addRoute。...Promise.resolve(failure) : navigate(toLocation, from)) pushWithRedirect最后会返回一个Promise,在没有错误时会执行navigate...H5 history API原生能力,但不是直接与这些api对接,而是与初始化传入history option(由 createWebHashHistory createWebHistory ...这包括同步和异步抛出错误、在任何导航守卫中返回传递给 next 错误,以及在试图解析渲染路由所需异步组件时发生错误。 实现原理:和导航守卫一样,通过useCallbacks实现。

    2.2K30

    JavaScript测试教程–part 4:模拟 API 调用和模拟 React 组件交互

    (例如 fs path ),则需要在模拟文件中明确调用 jest.mock('moduleName') Jest 允许我们对函数进行监视:接下来测试是否调用了我们所创建 get 函数。...spyOn 函数返回一个 mock函数。有关其功能完整列表,请阅读文档。我们测试检查组件在渲染和运行之后是否从模拟中调用 get函数,并成功执行。...ID唯一 首先检查修改输入是否会改变我们状态。...post 所有结果数组函数,通过它我们可以得到返回 promise:在 value 属性中可用。...从测试中返回 promise 能够确保 Jest 等待其解决一种方法。 总结 在本文中,我们介绍了模拟模块,并将其用于伪造 API 调用。由于没有发出实际请求要求,我们测试可以更可靠、更快。

    3.7K10

    使用Jest测试包含setTimeout调用函数踩坑记录

    而对于Promise实现,一个Promise对象创建时传入回调函数F会被立刻执行,但then和catch中传入回调会被加入到队列中,在下一轮Tick时才执行(即使F中立刻resolvereject...回到我们测试用例,原因也就明确了:调用enqueueJob之后,catch中回调被加入了队列,而随后delay则相当于直接调用了setTimeout(前面说到Promise对象构造时回调函数立刻执行...虽然从错误信息中我们知道可以通过jest.setTimeout来修改这个默认超时时间,但这个测试用例在实际运行时候也的确需要等待6s,如果我们有什么测试用例需要等待几分钟甚至几小时,那总不能在CI上卡个几小时等待用例通过吧...相应地,Jest还提供了advanceTimersByTime函数,可以将Jest运行测试用例时假时钟向前拨动,并“按时”运行之前通过setTimeout、setInterval传入回调。...根据Jest官方文档,调用这个函数后,所有队列中“微任务”都会被立刻执行,这里目的就是保证catch回调能被立刻调用; 使用jest.advanceTimersByTime(6000)代替await

    6.8K60

    50行代码串行Promise,koa洋葱模型原来这么有趣?

    返回一个函数,这个函数接收两个参数,分别是context和next,这个函数最后返回Promise。...))) } catch (err) { return Promise.reject(err) } } 值得一提:bind函数返回一个新函数。...也就是说koa-compose返回一个Promise,从中间件(传入数组)中取出第一个函数,传入context和第一个next函数来执行。...第一个next函数里也是返回一个Promise,从中间件(传入数组)中取出第二个函数,传入context和第二个next函数来执行。...第二个next函数里也是返回一个Promise,从中间件(传入数组)中取出第三个函数,传入context和第三个next函数来执行。 第三个... 以此类推。

    43220

    async函数

    (3)更广适用性 co模块预定,yield命令后面只能Thunk函数Promise对象。...而async函数await命令后面可以是Promise对象和原始类型(数值、字符串和布尔,这时候自动转成立即resolvePromise对象) (4)返回Promise async函数返回...,会导致返回Promise对象变成reject状态,抛出错误对象会被catch方法回调函数收到。...对象状态变化 async函数返回Promise对象,必须等到内部所有的await命令后面的Promise对象执行完,才会发生状态变化,除非遇到return语句或者抛出错误。...如果不是Promise对象,就直接返回对应。 另外,await命令后面一个thenable对象(定义了then方法对象),那么await会将其等同于Promise对象。

    81840

    前端自动化测试实践03—jest异步处理&mock

    ((response) => { fn(response.data); }) } // 返回 promise 交给后续程序处理 export const fetchData2 =...promise 处理成功,需要指定返回 expect 数量,否则可能直接走失败分支跳过 test('fetchData2 返回结果为 { success: true }', () => { /...() => { // 模拟函数返回,getData 不会真正发起 axios 请求 axios.get.mockResolvedValueOnce({ data: 'hello' }.../mock'); 4. mock - function 模拟函数调用 对于单元测试,无需关心外部传入函数实现,使用 jest.fn 生成一个 mock 函数,可以捕获函数调用和返回结果,以及this.../mock' test('测试 callback', () => { // 【1】使用 jest 生成一个 mock 函数 func1,用来捕获函数调用 const func1 = jest.fn

    5.2K85
    领券