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

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

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

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

前端自动化测试实践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.1K85

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

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

4.9K20

前端单元测试之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 --

43920

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

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

10.2K20

干货 | 携程租车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函数

6K30

单元测试

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

17710

【架构师(第二十七篇)】前端单元测试框架 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 使用总结基础篇

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

2.6K111

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,因为它更快。

7100

如何测试 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

Jest测试语法系列之Globals

中常见一些全局函数,欲知更多细节,请访问Jest官方文档。...afterEach(fn, timeout) 在该文件中每一个测试完成后运行一个函数,如果函数返回一个promise,Jest等待该promise在继续之前解决。...beforeAll(fn, timeout) 在该文件运行任何测试之前运行一个函数,如果函数返回一个承诺,则Jest等待在运行测试之前解决这个问题。...beforeEach(fn, timeout) 在该文件运行每个测试之前运行一个函数,如果函数返回一个promise,Jest等待该承诺在运行测试之前解决。...如果测试返回了一个promise,Jest会在测试完成之前等待promise。Jest还将等待,如果你为测试函数提供一个参数,通常称为done。当你想要测试回调时,这将非常方便。

1K30
领券