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

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

异步函数和异步方法总是返回一个Promise,无论它已完成还是拒绝,你必须附上 then() 和 catch(),无论如何。(或者将方法包装在try/catch)。...拒绝Promise将会在堆栈传播,除非你抓住(catch)它。 至于测试代码,应该这样写: ? 我们测试不能是普通异常,而是带有TypeErrorrejects。 现在测试通过了: ?...如果你想要更多try/catch.,有一件重要事需要注意。 下面的代码不会捕获错误: ? 记住:拒绝Promise会在堆栈传播,除非你抓住(catch)它。...异步函数和异步方法总是返回一个Promise,无论是已解决还是拒绝。 要拦截异步函数异常,必须使用catch()。...以下是在Jest测试异常规则: 使用 assert.throws 来测试普通函数和方法异常 使用 expect + rejects 来测试异步函数和异步方法异常 如果你对如何使用 Jest

2.9K30

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

在开源社区有超高人气,同时也获得了React官方推荐。 ? Jest 本篇文章我们着重来介绍一下Jest,也是我们整个React单元测试根基。 环境搭建 安装 安装Jest、Enzyme。...但这里我们思考一种场景:如果使用done来测试回调函数(包含定时器场景,setTimeout),由于定时器我们设置了 一定延时( 3s)后执行,等待 3s 后会发现测试通过了。...如果代码中使用了Promise,则可以通过返回Promise来处理异步代码,jest会等该promise状态转为resolve时才会结束,如果promisereject了,则该测试用例不通过。...这里用.catch来捕获promise返回reject,当promise返回reject时,才会执行expect语句。...在单元测试,我们可能并不需要关心内部调用方法执行过程和结果,只想知道它是否正确调用即可,甚至会指定该函数返回值。这个时候,mock意义就很大了。

4.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

Jest测试语法系列之Globals

afterAll(fn, timeout) 此API意思是,它是在所有测试运行完之后才会执行,如果你测试包含promise,则将会等待promise验证之后被执行。...afterEach(fn, timeout) 在该文件每一个测试完成后运行一个函数,如果函数返回一个promiseJest会等待该promise在继续之前解决。...如果在一个描述内部,它运行在描述每个测试。如果你只需要运行一些设置代码,在任何测试运行之前,就使用之前所有代码。...describe(name, fn) describe(name, fn)创建一个,在一个“测试套件”,将几个相关测试组合在一起。...如果测试返回了一个promiseJest会在测试完成之前等待promiseJest还将等待,如果你为测试函数提供一个参数,通常称为done。当你想要测试回调时,这将非常方便。

1K30

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

而对于Promise实现,一个Promise对象创建时传入回调函数F会被立刻执行,但then和catch传入回调会被加入到队列,在下一轮Tick时才执行(即使F中立刻resolve或reject...回到我们测试用例,原因也就明确了:调用enqueueJob之后,catch回调加入了队列,而随后delay则相当于直接调用了setTimeout(前面说到Promise对象构造时回调函数是立刻执行...),因此我们测试用例setTimeout会先于enqueueJobcatch回调setTimeout调用,因此expect(job.run).toHaveBeenCalledTimes(2)...根据Jest官方文档,调用这个函数后,所有队列“微任务”都会被立刻执行,这里目的就是保证catch回调能立刻调用; 使用jest.advanceTimersByTime(6000)代替await...Promisethen和catch回调会将任务放入微任务队列,我们还可以通过process.nextTick将一个回调放入微任务队列

6.6K60

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

1. async 异步请求处理 一般项目代码中会有不少异步 ajax 请求,例如测试下面 async.js 代码 import axios from 'axios'; // 传入 callback...,前端自动化测试,一般需要 mock 触发 ajax 请求,例如测试 mock.js 接口调用 export const getData = () => { return axios.get.../mock'); 4. mock - function 模拟函数调用 对于单元测试,无需关心外部传入函数实现,使用 jest.fn 生成一个 mock 函数,可以捕获函数调用和返回结果,以及this.../es6-class') jest.mock 如果发现是一个类,会自动把构造函数和方法变成 jest.fn() 提升性能,相当于执行了 const Util = jest.fn() Util.a =...() // 执行2次 【2】只运行队列timer jest.runOnlyPendingTimers() // 执行1次 【3】快进x jest.advanceTimersByTime(3000)

5K85

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

在前端开发单测本身并不是特别看重环节,特别是大部分人作为业务开发在如此卷环境下、业务不断迭代,单测带来好处并不能完全发现,反之前期会让人觉得浪费时间并且耽误开发进度。...%lines:行覆盖率,是否每一行都覆盖到了 我们可以通过查看报告来发现我们未覆盖代码 搭建单元测试环境 在我们使用大部分前端框架时其实已经内置了jest环境,vue-cli/umi等,所以并不需要大家从...toBeCalled(); }); }) 运行后发现fn调用0次,测试用例并没有通过。...这里分别使用了jest.spyOn和jest.Mock两个方式对同一个方法进行3种不同编写方式测试,在实际情况我们应该选择合适方法。...原因是如果依赖测试功能实现逻辑意味着修改实现逻辑但是输入输出没有变化也需要去更新测试代码。

10.2K20

【自动化测试】【Jest-Selenium】(03)—— Jest 异步测试

异步测试哪里特殊? 在JavaScript执行异步代码是很常见。当你有异步方式运行代码时,Jest 需要知道当前它测试代码是否已完成,然后它可以转移到另一个测试。...经典错误: 默认情况下,Jest 测试一旦执行到末尾就会完成。 问题在于一旦 fetchData 执行结束,此测试就在没有调用回调函数前结束。...Promise 模式 If a promise is returned from test, Jest will wait for the promise to resolve before letting...这个例子,显然,代码不会运行到 "expect(e).toMatch('error')",但测试用例还是通过了,这显然不是我们想要。 ?...参考: Jest Matchers: https://jestjs.io/docs/en/using-matchers Jest Expect API: https://jestjs.io/docs

1.4K10

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

模拟 对于我们程序来说,从 API 获取一些数据是很常见。但是它可能由于各种原因而失败,例如 API 关闭。我们希望测试可靠且独立,并确保可以模拟某些模块。...此类模拟文件在 _ mocks _ 目录定义,在该目录,文件名视为模拟模块名称。...(例如 fs 或 path ),则需要在模拟文件明确调用 jest.mock('moduleName') Jest 允许我们对函数进行监视:接下来测试是否调用了我们所创建 get 函数。...,通过它我们可以得到返回 promise:在 value 属性可用。...从测试返回 promise 是能够确保 Jest 等待其解决一种方法。 总结 在本文中,我们介绍了模拟模块,并将其用于伪造 API 调用。由于没有发出实际请求要求,我们测试可以更可靠、更快。

3.7K10

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

在之前两篇教程,我们学会了如何去测试最简单 React 组件。在实际开发,我们组件经常需要从外部 API 获取数据,并且组件交互逻辑也往往更复杂。...在这篇教程,我们将学习如何测试更复杂组件,包括用 Mock 去编写涉及外部 API 测试,以及通过 Enzyme 来轻松模拟组件交互 初次尝试 Jest Mock 我们应用程序通常需要从外部...然后创建一个测试用例,检查 Mock 模块是否正确调用。...postSpy.mock.results 是 post 函数发送结果数组,通过使用它,我们可以得到返回 promise,我们可以从 value 属性取到这个 promise。...从测试返回 promise 是确保 Jest 等待其异步方法执行结束一种方法。 小结 在本文中,我们介绍了 mock 模块,并将其用于伪造API调用。

4.7K20

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

))) } catch (err) { return Promise.reject(err) } } 值得一提是:bind函数是返回一个新函数。...也就是 next 是下一个中间件里函数。也就能解释上文中 gif图函数执行顺序。测试用例数组最终顺序是[1,2,3,4,5,6]。...通过本文,我们熟悉了 koa-compose 中间件常说洋葱模型,学会了部分 `jest`[6] 用法,同时也学会了如何使用现成测试用例去调试源码。...相信学会了通过测试用例调试源码后,会觉得源码也没有想象那么难。 开源项目,一般都会有很全面的测试用例。...除了可以给我们学习源码调试源码带来方便同时,也可以给我们带来启发:自己工作项目,也可以逐步引入测试工具,比如 jest

41020

Vue 业务系统如何落地单元测试

一直对单测很感兴趣,但对单测覆盖率、测试报告等关键词懵懵懂懂,最近几个月一直在摸索如何在Vue业务系统中落地单元测试,看到慢慢增长覆盖率,慢慢清晰模块,对单元测试理解也比以前更加深入,也有一些心得和收获...定义 单元测试定义: 单元测试是指对软件最小可测试单元进行检查和验证。...单元在质量保证是非常重要环节,根据测试金字塔原理,越往上层测试,所需测试投入比例越大,效果也越差,而单元测试成本要小多,也更容易发现问题。...质量:模块功能通过测试用例得到保障。 维护:测试即文档,方便了解业务逻辑。 实践:在添加单测过程,抽象模块,重构部分功能,并对单一职责模块增加单测。 5....基本类型偏执 重复switch 循环语句 冗赘元素 夸夸其谈通用性 临时字段 过长消息链 中间人 内幕交易 过大类 异曲同工类 纯数据类 拒绝遗赠-继承父类无用属性或方法 注释-当你感觉需要撰写注释时

3.9K30

JestMock网络请求

JestMock网络请求 最近需要将一个比较老库修改为TS并进行单元测试,修改为TS还能会一点,单元测试纯粹是现学现卖了,初学Jest框架,觉得在单元测试中比较麻烦就是测试网络请求,所以记录一下Mock...npm run test:demo3: 使用Jest库完成demo2实现。...处理,通过npm run test:demo1即可尝试运行,实际上是将包装axioswrap-request库进行了一个mock操作,在Jest启动时会进行编译,在这里将这个库mock掉后,所有在之后引入这个库文件都是会获得...,所幸Jest提供了一种可以直接实现被Mock函数库方式,当然实际上Jest还提供了mockImplementation方式,这个是在demo3使用方式,在这里我们重写了mock函数库,在实现时候也可以使用...关于要测试数据,指定了一个DataMapper类型,减少类型出错导致异常,在这里示例了两个数据集,另外在匹配query和data时是支持正则表达式,对于DataMapper类型结构还是比较标准

3.3K30

重学JavaScript Promise API

在这篇教程,我们将掌握如何在JavaScript创建并使用Promise。我们将了解Promise链式调用、错误处理以及最近添加到语言中一些Promise静态方法。 什么是Promise?...如果Promise拒绝,失败回调将被调用。无论我们传递给reject是什么,都将作为参数传递给该回调。...幸运是,还有更好方式。 catch方法 我们还可以使用catch方法,它可以为我们处理错误。当一个PromisePromise任何地方rejected时,控制会跳转到最近拒绝处理函数。...第7行包含错误,第9行是捕获错误catch。 finally方法 Promise.finally方法在Promise settled后运行,也就是resolved或者rejected。...1”,因为数组第一个Promise会被立即拒绝,并且拒绝会被我们catch捕获。

12820

JestMock网络请求

npm run test:demo3: 使用Jest库完成demo2实现。...处理,通过npm run test:demo1即可尝试运行,实际上是将包装axioswrap-request库进行了一个mock操作,在Jest启动时会进行编译,在这里将这个库mock掉后,所有在之后引入这个库文件都是会获得...,所幸Jest提供了一种可以直接实现被Mock函数库方式,当然实际上Jest还提供了mockImplementation方式,这个是在demo3使用方式,在这里我们重写了mock函数库,在实现时候也可以使用...在这里就使用到了jest-axios-mock-server库,首先我们需要指定三个文件,分别对应每个单元测试文件启动前执行,Jest测试启动前执行,与Jest测试完成后执行三个生命周期进行操作,分别是...关于要测试数据,指定了一个DataMapper类型,减少类型出错导致异常,在这里示例了两个数据集,另外在匹配query和data时是支持正则表达式,对于DataMapper类型结构还是比较标准

2.6K30

使用 Jest 进行前端单元测试

我们只要稍作加工,就可以指定各个文件行为,并模拟我们想要情况来进行不同测试,例如本例控制 fetchUser 返回。...,例如我想拿到第 m 次调用时第 n 个参数,就可以通过 mock.calls 来访问到: var myMock = jest.fn(); myMock('1'); myMock('a', 'b'...Timer 业务代码如果有 setTimeout 这样计时器,在测试过程如果真实去执行,可能会严重拖慢整个测试项目的执行时间,设想一个功能有 n 个用例去测试,延时就会被重复 n 倍。...在 Jest 也不用像 mocha 那样通过执行 done 来通知异步结束,而是直接返回 Promise 和 async/await 就好。...,不同测试文件是分开独立执行,如果担心各种 mock 和 unmock 在不同测试用例之间造成冲突,可以按照分类把用例分开放到不同文件内。

5.5K90

JSCallback VS Promise

这些.then是在内部设置,因此它们允许回调函数返回promise,然后将其应用于.then链每个. .then除了.catch带来拒绝Promise外,您从中返回任何东西最终都会变成一个正常...这仅在此处类似于Promise.allSettled 。如果这些操作某一项或者多项失败,则Promise拒绝并显示错误。最终,这会出现在.catchPromise 链。...每当可迭代Promise一个PromisePromise值或原因解析或拒绝时,此方法都会返回一个履行或拒绝Promise。...由于另一个Promise延迟了200毫秒,因此返回值最终成为了Promise拒绝。...,这个Promise将会在所有给定Promise都已解决或拒绝后最终解决,并将结果累积到每个项目代表其promise操作结果数组。

5K21
领券