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

从echarts-for-react源码中学习如何写单元测试

/src/utils'; // 把遇到的计时器挂起,必要,再使用jest.runOnlyPendingTimers执行掉已经挂起的计时器 jest.useFakeTimers(); // 描述块,将多个...); 分析 ① jest.useFakeTimers() 作用: 把遇到的计时器挂起,必要,再使用jest.runOnlyPendingTimers执行掉已经挂起的计时器 这里使用jest.useFakeTimers...新建mock function 进行单元测试,应该将关注点放在「测试目标」,而onChartReady作为被依赖的function,不管它的内部发生了什么,都与「测试目标」无关,只需关注返回的值(...return xxx)即可 为了减少依赖,所以使用了mock function即jest.fn() ② 通过component.props()获取到传到组件的props ③ 通过expect(function...).toBeCalled(),判断函数有被调用 ④ 通过component.setProps(),来组件传入新属性 ⑤ 通过component.update()来强制更新React组件,如果组件是ClassComponent

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

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

:函数是否被调用 * toBeCalledWith:函数是否以某些参数入参被调用 * assertions:检测用例中有多少个断言被调用,一般用于异步测试 四、Jest 周期函数 写测试用例之前,可以用四个周期函数进行一些处理...Mock函数 单元测试中,有许多对象或函数并不需要真实的引用,因此需要mock。...比如之前提到的初始化文件jest.setup.js中,我们会mock一些对象: jest.useFakeTimers(); //mock时间 jest.mock('....instance = fliterModal.instance(); //获取当前组件实例 //jest.spyOn创建一个mock函数,该mock函数不仅捕获函数的调用情况,还可以正常的执行被spy..._onClear).toBeCalled();//测试组件实例的方法是否被调用 九、Redux测试 使用React或者React Native通常会使用Redux进行状态的管理,需要mock store

6K30

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

编写 axios 模块的 mock 文件 Jest 支持对整个模块进行 Mock,使得组件不会调用原始的模块,而是调用我们预设的 Mock 模块。...打开 TodoList 的测试文件,首先在最前面通过 jest.mock 配置 axios 模块的 Mock(确保要在 import TodoList 之前), Mock 之后,无论测试还是组件中使用的都将是...(); }); }); }); 测试模块中一个函数是否被调用实际是比较困难的,但是所幸 Jest 我们提供了完整的支持。...首先通过 jest.spyOn,我们便可以监听一个函数的使用情况,然后使用配套的 toBeCalled Matcher 来判断该函数是否被调用。整体代码十分简洁,同时也保持了很好的可读性。...从测试返回 promise 是确保 Jest 等待其异步方法执行结束的一种方法。 小结 本文中,我们介绍了 mock 模块,并将其用于伪造API调用

4.8K20

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

jest.mock('moduleName') Jest 允许我们对函数进行监视:接下来测试是否调用了我们所创建的 get 函数。...).toBeCalled(); }); }); }); 通过调用 jest.mock('axios'),Jest 的测试和组件中都用我们的模拟代替了 axios。...spyOn 函数返回一个 mock函数。有关其功能的完整列表,请阅读文档。我们的测试检查组件渲染和运行之后是否从模拟中调用 get函数,并成功执行。...fetchSpy).toBeCalled(); }); }); }); 模拟 React 组件的交互 之前的文章中,我们提到了阅读组件的状态或属性,但这是实际与之交互。...从测试中返回 promise 是能够确保 Jest 等待其解决的一种方法。 总结 本文中,我们介绍了模拟模块,并将其用于伪造 API 调用。由于没有发出实际的请求要求,我们的测试可以更可靠、更快。

3.7K10

React单元测试:Jest + Enzyme(二)

前言 在上一篇教程中,我们成功搭建了基于Jest和Enzyme的单元测试框架并成功地跑起来第一个单元测试,可以点击这里回顾一下。今天,我们重点讨论如何通过Jestmock数据。...什么是Mock Mock的简单翻译就是模拟。既可以模拟数据,也可以模拟行为。在上一篇文章中,就用到了mock功能来忽略对多媒体文件和字体文件等的请求: "jest": { ......return ajaxCall('api/data'); } } export default new DataApi(); 对应的,我们可以利用Jest的fn方法来模拟这个api调用并返回数据...}); it('should call apis rightly', () => { expect(dataApi.getData).toBeCalled(); });...}); 通过显式指定mock的来源:jest.mock('common/api/data'),来mock api请求。

1.4K20

浅谈前端测试

mock   当引入三方库,不得不 mock 数据,因为单元测试更多讲求的是局部测试,不要受外界三方引入包的影响   例如: const { readFileSync } = require('...(console.log).toBeCalled()  })  })   上面代码简单的实现了一个读取文件是否成功的测试,先别急着纠错,这段测试本身是错的,下面慢慢分析   我们最开始创建了一个 mocks...(console.log) 这里会报错,因为 jest 断言的内容只能是 mock function 或 spy,这里 console 是全局对象 global 的方法,我们没有 require 将其引入...(getFile()).toThrow()  expect(global.console.log).not.toBeCalled()  })   读取文件失败的测试就好理解的多,注意的就是对一个 jest.fn...掉 package.json 我们自己的模拟数据,但是 jest 不支持动态路径的 mock,试着这样写 jest.mock(${process.cwd()}/package.json, () =>

1.7K10

单测商家前端业务中的实践

,相应的调用流程和条件描述了出来,这样其他人在接手这块业务,通过这个用例就能清楚知道导出活动日志需求上有些什么限制以及要做的操作。...当然实际写单测中,我们也不应该成为一个完全的mockist,无休止的进行mock,更好的方式是两者结合,否则滥用mock反而会导致单测写起来会更繁琐(因为要去mock所有调用的函数实现或场景),而且真实代码写起来也会很别扭...结合前面的mock,我们可对函数的调用情况进行捕获,针对上面发起取消退款的函数,断言的例子如下:describe('导出活动日志', () => { it('导出,先查询当前活动状态,若状态是未在进行中...expect(downloadExcelFile).toBeCalled() }) it('导出,若导出数量大于5000条,将不允许导出', () => { // 省略......目前组内各个项目已逐渐沉淀了几百个用例,团队内相互支援或自己回顾,通过这些用例就能知道这块逻辑在做什么事,修改这些需求通过测试用例也能尽快知道基本的业务逻辑,有了单测的保障,改起代码来更有底气,代码结构

59410

前端自动化测试

react-addons-test-utils:官方API,有些晦涩 Enzyme:源自Airbnb,封装了React官方测试API,类Jquery风格简洁的API, 使得Dom操作变得十分友好 综合目前市面上的轮子,我们技术选型Jest...这里可以首先简单的看一下,Jest+Enzyme的基本语法: Jest的API更多着力于定义测试、断言、mock库 定义测试: describe: 定义一个测试套件(test suite) it: 定义一个测试...(test) beforeEach: 定义一个回调函数每个测试之前执行 expect: 执行一个断言 jest.fn(): 创造一个mock函数 一些用于断言的方法: toEqual: 验证两个值是否相同...: 验证一个mock函数是否被调用 toBeCalledWith: 验证一个mock函数是否被传入指定的参数被调用 一些用于mock的方法: mockImplementation: 提供mock函数的执行...mockReturnValue: mock函数被调用返回一个值 Enzyme的API更多着重于渲染react组件和从dom树种检索指定的节点 下面是三种渲染组件的方法: shallow: 会渲染至虚拟

1.9K20

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

所有的模块都自动从 mock 导入. clearMocks: 每个测试前自动清理 mock调用和实例 instance collectCoverage: 是否收集测试的覆盖率信息 collectCoverageFrom...fulfilled 包裹的值,支持链式调用 rejects:用来取出 promise rejected 包裹的值,支持链式调用 toHaveBeenCalled():用来判断 mock function...Mock 介绍jest中的mock之前,我们先来思考一个问题:为什么要使用mock函数? 项目中,一个模块的方法内常常会去调用另外一个模块的方法。...).toBeCalled(); // 断言mockFn被调用了一次 expect(mockFn).toBeCalledTimes(1); // 断言mockFn传入的参数1, 2, 3...实际jest.spyOn()是jest.fn()的语法糖,它创建了一个和被spy的函数具有相同内部代码的mock函数。 Snapshot 快照测试 所谓snapshot,即快照也。

4.9K20

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

Mock 的几大功能 创建 mock function,测试中使用,用来测试回调 手动 mock,覆盖第三方实现,狸猫换太子 三大 API 实现不同粒度的时间控制 函数测试 function mockTest...,会造成大量重复的工作,可以根目录下新建 __mocks__ 文件夹, 然后新建需要 mock 的模块同名文件 axios.js,jest 会自动对这个文件夹下的文件进行处理。...jest.runOnlyPendingTimers() // 调用次数 expect(callback).toHaveBeenCalledTimes(1) // 一次调用的参数...// 调用次数 expect(callback).toHaveBeenCalledTimes(2) // 一次调用的参数 expect(callback).toHaveBeenLastCalledWith...) // 调用次数 expect(callback).toHaveBeenCalledTimes(2) // 一次调用的参数 expect(callback).toHaveBeenLastCalledWith

1.3K20

使用 Jest 进行前端单元测试

mock function 会自动记录每次的调用信息,例如我想拿到第 m 次被调用时的第 n 个参数,就可以通过 mock.calls 来访问到: var myMock = jest.fn(); myMock...Jest 对所有的 Timer (setTimeout, setInterval, clearTimeout, clearInterval 等)都提供了 mock 和 API,让你可以测试反客为主,...例如使用 jest.useFakeTimers() 把遇到的计时器挂起,必要再使用 jest.runOnlyPendingTimers() 执行掉已经挂起的计时器。...下图为 react-native 源项目中执行 verbose 的 jest test ,控制台的实时输出: ? Jest 的覆盖率统计: ? 详细报错定位: ?...另外因为 fetch 的 promise 链的连续操作,mock 还要注意实现 response.json() 等操作。 这样的代码不仅显得比较长,单独一个测试用例的 mock 也很长。

5.5K90

手写一个简易版 Jest

此外,也可以 mock 函数: 可以拿到 mock 的函数被调用了几次,第几次调用的参数是什么: 此外,jest 还有 beforeAll、afterAll、beforeEach、afterEach 这些钩子函数...,可以全部单测、每个单测执行前后来执行一些逻辑: 综上,Matcher、Mock、钩子函数,这些就是 Jest 常用的功能了。...jest 就是通过这种方式跑的代码,注入了 jest、test、expect 等全局 api。 还有,为什么可以 mock 测试的模块依赖的模块,可以任意修改它的内容呢?...因为 jest 注入 vm 的 require 是自己实现的: 它实现 require.cache 的时候是用的 Proxy 动态代理了 get 方法,动态读取了注册的模块的值。...Jest 的核心功能就是 Matcher(expect 函数),Mock(函数 mock 和模块 mock),再就是钩子函数。

12510

前端单元测试之Jest

这样,进行一些和数据相关的测试,可以测试前准备一些数据,测试完成后清理测试数据。这部分的知识可以参考官方的全局API。...Mock函数通常会提供以下三种特性: 捕获函数调用情况; 设置函数返回值; 改变函数的内部实现; jest.fn() jest.fn()是创建Mock函数最简单的方式,如果没有定义函数内部的实现,jest.fn...)生成一个mock函数 const fn = jest.fn(); foreach([1, 2, 3], fn); //测试mock函数被调用了3次...expect(fn.mock.calls.length).toBe(3); // 测试第二次调用的函数第一个参数是3 expect(fn.mock.calls[2][0]...(fn.mock.calls.length).toBe(3); expect(fn.mock.calls[1][1]).toBe(1); }) }) 手动mock 测试代码可以忽略模块的依存关系

2.7K20

前端单元测试那些事

目前除了 Facebook 外,Twitter、Airbnb 也使用 JestJest 除了基本的断言和 Mock 功能外,还有快照测试、实时监控模式、覆盖度报告等实用功能。...{a: 1});//会递归检查对象的每个字段 expect(1).not.toBe(2)//判断不等 expect(n).toBeNull(); //判断是否null expect(n).toBeTruthy...(); //判断结果true expect(n).toBeFalsy(); //判断结果false expect(value).toBeCloseTo(0.3); // 浮点数判断相等 expect...对象执行了回调函数 注:有时候会存在一种情况,同个组件中调用同个方法,只是返回值不同,我们可能要对它进行多次不同的mock,这时候需要在beforeEach使用restoreAllMocks方法重置状态...mock的目的: 设置函数返回值 获取获函数调用情况 改变原本函数的内部实现 4. ️

4.3K40

一杯茶的时间,上手 Jest 测试框架

expectJest 最终落在了每一个对测试结果的 期望 ,通过 expect 中的返回值或是函数执行结果来和期望值进行对比。...--行,网页展示出来怎么样 配置jest.config.js保存测试用例覆盖率执行报告 我们执初始化Jest默认配置的时候,会生成项目根目录下生成jest.config.js,里面列出了所有的配置项...3.Jest怎么和Typescript完美结合(填坑实录) 搜索引擎现有的 Jest + Typescript 的样例比较少,并且存在了一定的问题没有解决,这一部分我已经填平了坑,可以作为配置参考。...从以上两点可以衍生出 Jest 对于代码单元测试中两项常用的锋利功能: 对功能中业务逻辑简化后的重新实现,方便有指向性的进行测试(比如忽略实际场景中的跨服务调用功能等,仅需将原有功能中对应的调用逻辑改为定义的测试数据即可....mock的中将会记录mock function调用后的相关信息。

1.9K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券