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

Jest expect不能捕获来自异步等待函数的抛出

Jest是一个流行的JavaScript测试框架,用于编写和运行单元测试。它提供了一组丰富的断言函数,其中包括expect函数用于验证测试结果。然而,Jest的expect函数无法捕获来自异步等待函数的抛出。

异步等待函数是指返回Promise对象的函数,通常用于处理异步操作,例如网络请求或定时器。在测试中,我们经常需要验证异步等待函数是否按预期抛出异常或返回正确的结果。

为了解决Jest expect无法捕获异步等待函数抛出的问题,我们可以使用async/await结合try/catch语句来处理异步操作。下面是一个示例:

代码语言:txt
复制
test('异步等待函数抛出异常测试', async () => {
  try {
    await asyncFunction(); // 异步等待函数
    expect(true).toBe(false); // 如果异步等待函数没有抛出异常,则测试失败
  } catch (error) {
    expect(error).toBeInstanceOf(Error); // 验证异常类型
    expect(error.message).toBe('Expected error message'); // 验证异常消息
  }
});

在上面的示例中,我们使用了async/await关键字将测试函数标记为异步函数,并使用try/catch语句来捕获异步等待函数的异常。在try块中,我们调用了异步等待函数,并在catch块中进行断言验证。

需要注意的是,如果异步等待函数返回的是一个Promise对象,我们可以使用.rejects匹配器来验证是否抛出了异常。下面是一个示例:

代码语言:txt
复制
test('异步等待函数抛出异常测试', async () => {
  await expect(asyncFunction()).rejects.toThrow('Expected error message');
});

在上面的示例中,我们使用了.rejects匹配器来验证异步等待函数是否抛出了异常,并使用.toThrow匹配器来验证异常消息。

总结起来,Jest的expect函数无法直接捕获来自异步等待函数的抛出,但我们可以使用async/await结合try/catch语句或.rejects匹配器来处理异步操作中的异常。这样可以确保我们的测试能够全面覆盖各种情况,并提高代码质量。

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

  • 腾讯云函数(云原生无服务器计算):https://cloud.tencent.com/product/scf
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb-for-mysql
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobdev
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云游戏多媒体引擎:https://cloud.tencent.com/product/gme
  • 腾讯云音视频处理:https://cloud.tencent.com/product/mps
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

/ 可以在 Javascript 异步函数抛出错误吗?...你将学到什么 通过后面的内容你将学到: 如何从 Javascript 异步函数抛出错误 如何使用 Jest 测试来自异步函数异常 要求 要继续往下读你应该: 对 Javascript 和 ES6...有基本了解 安装 Node.Js 和 Jest 如何从 Javascript 常规函数抛出错误 使用异常而不是返回码(清洁代码)。...换句话说,我不能使用 assert.throws 来测试它。 让我们通过测试来验证一下: ? 测试失败了! ? 有没有悟出点什么? 看把你能,来抓我啊 从严格意义上讲异步函数异步方法不会抛出错误。...以下是在Jest中测试异常规则: 使用 assert.throws 来测试普通函数和方法中异常 使用 expect + rejects 来测试异步函数异步方法中异常 如果你对如何使用 Jest

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

    前端自动化测试实践03—jest异步处理&mock TOC Write By CS逍遥剑仙 我主页: www.csxiaoyao.com GitHub: github.com/csxiaoyaojianxian...1. async 异步请求处理 一般项目代码中会有不少异步 ajax 请求,例如测试下面 async.js 中代码 import axios from 'axios'; // 传入 callback.../mock'); 4. mock - function 模拟函数调用 对于单元测试,无需关心外部传入函数实现,使用 jest.fn 生成一个 mock 函数,可以捕获函数调用和返回结果,以及this.../mock' test('测试 callback', () => { // 【1】使用 jest 生成一个 mock 函数 func1,用来捕获函数调用 const func1 = jest.fn.../es6-class') jest.mock 如果发现是一个类,会自动把构造函数和方法变成 jest.fn() 以提升性能,相当于执行了 const Util = jest.fn() Util.a =

    5.2K85

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

    jest提供了三种方案来测试异步代码,下面我们分别来看一下。 done 关键字 当我们test函数中出现了异步回调函数时,可以给test函数传入一个done参数,它是一个函数类型参数。...但这里我们思考一种场景:如果使用done来测试回调函数(包含定时器场景,如setTimeout),由于定时器我们设置了 一定延时(如 3s)后执行,等待 3s 后会发现测试通过了。...这里用.catch来捕获promise返回reject,当promise返回reject时,才会执行expect语句。...我们在测试中也主要是用到了mock函数提供以下三种特性: 捕获函数调用情况 设置函数返回值 改变函数内部实现 下面,我将分别介绍这三种方法以及他们在实际测试中应用。...jest.spyOn() jest.spyOn()方法同样创建一个mock函数,但是该mock函数不仅能够捕获函数调用情况,还可以正常执行被spy函数

    5K20

    前端单元测试之Jest

    Jest框架内置了丰富断言语句,详细可以参考Jest Expect。...这里列举4个主要生命周期勾子: afterAll(fn, timeout): 当前文件中所有测试执行完成后执行 fn, 如果 fn 是 promise,jest等待timeout 毫秒,默认 5000...Mock函数通常会提供以下三种特性: 捕获函数调用情况; 设置函数返回值; 改变函数内部实现; jest.fn() jest.fn()是创建Mock函数最简单方式,如果没有定义函数内部实现,jest.fn...当有异步方式运行代码时候,Jest需要知道当前它测试代码是否已经完成,然后它才可以转移动另一个测试中,也就是说,测试用例一定要在测试对象结束之后才能够运行。...Jest异步测试主要分为3种: done函数 return promise async/await done例子如下: function fetchData(call) { setTimeout

    2.7K20

    JavaScript单元测试利器Jest+mocha+chai

    javascript是一门单线程语言,最显著特点就是有很多异步执行。...同步代码测试比较简单,直接判断函数返回值是否符合预期就行了,而异步函数,就需要测试框架支持回调、promise或其他方式来判断测试结果正确性了。...mocha可以良好支持javascript异步单元测试。 mocha会串行地执行我们编写测试用例,可以在将未捕获异常指向对应用例同时,保证输出灵活准确测试结果报告。...异常处理语句有4中:Throw==主动抛出异常。Try==指明需要处理代码段。Catch==捕获异常。Finally==后期处理。...;})});我们看到有红色输出就说明我们用例有失败,一目了然哪个case是失败3.2:Jest实例演练安装jest:npm install -g jest初始化项目的jest配置: jest --

    58420

    Jest单元测试之旅—实践总结

    Jest本身支持产出代码测试覆盖率,而覆盖率则是评判单测好坏途径之一(并不是唯一,再次提及我们不能为了单测而单测)。...下面会根据各种场景进行分析 二、异步函数 在我们实际开发中我们会遇到很多异步函数,但是因为Jest在进行测试时,默认情况下一旦到达运行上下文底部当前测试立即结束,这样意味着测试将不能按照我们预期进行,...好在Jest在针对异步函数测试也提供了我们多种方法。...resolves/rejects:Jest等待异步函数执行完毕该方法应该和async/await配合使用 手动调用done:在我们没有调用done之前,当前测试不会结束,直至调用done方法,有点类似回调...在实际开发中,我们还会遇到另一种情况,当我们循环定时器方法内是一个异步函数,如下: // src/example5.ts export const asyncLoopTime = (callback:

    10.3K20

    干货 | 携程租车React Native单元测试实践

    (add(x, y)).toBe(output); }); }); * describe:创造一个块,将一组相关测试用例组合在一起 * test:也可以用it,测试用例 * expect:使用该函数断言某个值...* toBeCalledWith:函数是否以某些参数为入参被调用 * assertions:检测用例中有多少个断言被调用,一般用于异步测试 四、Jest 周期函数 在写测试用例之前,可以用四个周期函数进行一些处理...七、Jest 异步测试 Jest单元测试是同步,因此面对异步操作如fetch获取数据,需要进行异步模拟测试。...因为渲染了真实DOM节点,可以用来测试DOM API交互和组件生命周期。 render:静态渲染,渲染为静态HTML字符串,包括子组件,不能访问生命周期,不能模拟交互。...创建一个mock函数,该mock函数不仅捕获函数调用情况,还可以正常执行被spy函数

    6.1K30

    单元测试

    ,找不到元素会报错 queryBy* 用于查询我们希望它不存在元素并进行断言,找不到元素返回null findBy* 用于查询需要等待异步元素,不需要使用waitFor包裹 批量选择:getAllBy...这样可以确保每个测试用例完成后,不会留下任何对后续测试用例有影响状态。 确保在每个测试用例中,等待异步操作完成后再进行断言。...可以使用 await 关键字或适当异步测试工具(如 waitFor)来等待异步操作完成。...当你在测试中进行异步操作(例如使用 setTimeout、Promise 等)时,可以使用 act 来等待异步操作完成后再进行断言。...find* 其实也是在内部用了 waitFor),但是第二种使用方法更清晰,而且抛出错误信息会更友好。

    27210

    自动化测试 Jest 使用总结基础篇

    使用 jest 原因 随着前端发展,web交互越来越复杂,自动化测试是非常有必要融入到开发流程中,而目前界内普遍通用且比较火就是有 facebook开发 Jest 这套工具。...(sum.textTest()).toMatch(/I/); }); 验证异步情况下参数是否正确 callback 函数校验 使用 jest 做回调操作测试需要注意,函数回掉情况。...(callback); }); 官网上特别标记了这样情况,这样是拿不到他异步状态,他同步代码执行完毕之后,才能拿到异步数据,而这里他是执行完,test 就停止了。...(data).toBe('fight'); }); 如果期望是异常状态情况可以使用 catch 进行捕获,异常情况测试一般是在一些兜底逻辑情况下,获取异常情况再执行特定逻辑。...钩子函数使用 钩子执行 再执行测试文件时候,如果有需要对函数进行特殊处理可以在执行前和执行后使用钩子函数,beforeEach and afterEach。

    2.7K111

    【架构师(第二十七篇)】前端单元测试框架 Jest 基础知识入门

    测试框架 断言 Mock 异步支持 代码覆盖率 测试框架 jest 简介 特点 开箱即用,零配置 快 内置代码覆盖率 容易 mock 安装 npm i --save-dev jest 查看版本 npx...({ name: 'warbler' }); }); 测试结果 编辑器 如果使用是 vscode 并且安装了 jest 插件,那么可以实时并且直观看到测试是否通过 Jest 实现异步测试 回调方式...const mockCB = jest.fn() mockTest(true, mockCB) // 函数是否被调用过了 expect(mockCB).toHaveBeenCalled...() loopFetchUser(callback) // 没有被调用 expect(callback).not.toHaveBeenCalled() // 执行完正在等待 timer...expect(callback).toHaveBeenLastCalledWith('one') // 执行完正在等待 timer jest.runOnlyPendingTimers()

    1.3K20

    Jest与React Testing Library:前端测试最佳实践

    ('Data loaded')).toBeInTheDocument());});测试状态和副作用使用jest.useFakeTimers()和act函数来测试状态变化和副作用,如定时器或副作用函数jest.useFakeTimers.../myFunction';jest.spyOn(myModule, 'myFunction');// 在测试中调用函数myFunction();// 检查函数是否被调用expect(myFunction...).toHaveBeenCalled();// 检查函数调用具体参数expect(myFunction).toHaveBeenCalledWith(expectedArgs);// 重置模拟myFunction.mockReset...();// 重置并清除模拟返回值和调用记录myFunction.mockClear();// 恢复原函数myFunction.mockRestore();测试异步逻辑使用async/await和await...使用jest.spyOn代替jest.fn:对于性能敏感函数,使用jest.spyOn代替jest.fn,因为它更快。

    16500

    如何测试 React 异步组件?

    异步组件测试内容 我们知道异步请求主要用于从服务器上获取数据,这个异步请求可能是主动触发,也可能是(鼠标)事件响应,本文主要包含 2 方面内容: 如何测试在 componentDidMount 生命周期中发出异步请求...如何测试(鼠标)事件发出异步请求 ? ---- 对于异步组件,有两件步骤需要进行测试: 第一:测试异步方法本身有没有被调用,并且传了正确参数。 第二:在调用之后,应用程序应该做出响应。...By* 函数获取dom 中元素, 这里使用 getByPlaceholderText 以上测试用例只测试了登录函数,但是我们并未写登录成功或者失败逻辑,接下来来我们通过 jest mock 函数功能来模拟登录.../api/posts"); 我们可以在官方文档中阅读关于 jest.mock 更多信息。 它所做就是告诉 Jest 替换/api/posts 模块。...然后,我们等待异步方法解析并等待 Posts 组件重新渲染。为此,我们使用 waitFor 方法,同时检查标题是否呈现,之后遍历检查,确保每一个标题在页面上。

    3.3K50

    Vuex 之单元测试

    ( "SET_AUTHENTICATED", true) }) }) 因为 axios 是异步,为保证 Jest 等到测试完成后才执行,我们需要将其声明为 async 并在其后 await...不然的话(译注:即假如不使用 async/await 而仅仅将 3 个 expect 断言放入异步函数 then() 中)测试会早于 expect断言完成,并且我们将得到一个常绿 -- 一个不会失败测试...({ commit: jest.fn() }, {})) .rejects.toThrow("API Error occurred.") }) 我们要找到一种强制 axios mock 抛出错误方法...Instead, it threw: Mock error 成功抛出了一个错误... 却并非我们期望那个。...我们创建了一个 localVue 并 use 了 Vuex,然后创建了一个 store,传入一个 Jest mock 函数 (jest.fn()) 代替 testMutation。

    3.3K20

    Vue Test Utils处理异步行为

    Vue 是被动更新:当你更改一个值时,DOM 会自动更新以反映最新值。Vue 以异步方式执行这些更新。相比之下,像 Jest 这样测试运行程序则是同步执行代码。...关于这一 JavaScript 核心行为,可以阅读更多关于事件循环及其宏任务和微任务信息。使用nextTick保障 DOM 更新Vue 提供了一种等待 DOM 更新方法:nextTick。...一个常见示例是返回 Promise 函数。...以下是示例:const Async = defineComponent({ async setup() { // 等待一些异步操作 }})测试此组件时,可以这样写:test('Async component...使用 Suspense 在异步测试函数中测试异步 setup 组件。通过这些策略,你可以确保 Vue 组件在测试时按预期更新和运行,从而获得可靠测试结果。

    7400
    领券