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

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

以为的以为却把自己给坑了,发现自己对于前端单元测试一无所知。...然后翻阅了大量的文档,发现基于dva的单元测试文档比较少,因此在有了一番实践之后,梳理了几篇文章,希望对于想使用 Jest 进行 React + Dva + Antd 单元测试的你能有所帮助。...前端自动化测试产生的背景 在开始介绍jest之前,想有必要简单阐述一下关于前端单元测试的一些基础信息。 为什么要进行测试?...Jest特点: 零配置 快照 隔离 优秀的 api 快速且安全 代码覆盖率 轻松模拟 优秀的报错信息 Enzyme Enzyme是Airbnb开源的React测试工具库,提供了一套简洁强大的API,并内置...这种方式就不用去模拟axios,而是直接走的本地的模拟方法,也是比较常用的一种方式,这里就不展开说明了。

4.9K20

React + Redux Testing Library 单元测试

PPT 内容: https://jimmylv.gitee.io/slides/react-test 为什么要有单元测试? 走? vs ?...跑 image.png 写不好是能力问题,写则是态度问题。 单元测试客观上可以让开发者的工作更高效,React 应用的单元测试是一定要的。...这个结论对我们写写单元测试有什么影响呢?答案是,写单元测试,你就快起来。为啥呢?...,jest.fn() 代表着就是一个 Stub(桩),“你来就在这里,你走也依然在这里,风雨无阻”。...而另一种特定行为就是返回特定的数据,即 Stub 也可以根据输入模拟返回一种输出,作为某些模块的替身帮它演戏,比如“小鲜肉们”遇到要跳车啦、要卿卿(误)的时候就要找替身,“一二三四五六七八”连台词都不用背还需要配音

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

如何测试驱动开发 React 组件?

TDD 的过程 编写测试用例 运行测试,测试失败 修改代码 测试通过 重构/优化代码 新增功能,重复上述步骤 在某种程度上,它可能在初学者看来是单调乏味或者不切实际的,但是严格按照这个步骤来做这件事,...但是实际上,将测试的组件还不存在。 首先通过 getByRole 方法 查找 role属性等于dialog能否文档中找到。...现在我们得到了我们想要的组件渲染的 HTML ,现在想要确保可以从外部传递这个组件的按钮的回调函数,并确保它们在单击按钮时被调用。...创建一个模拟函数,将其作为“onOk”处理函数传递给组件,模拟单击“确认”按钮,并断言函数已被调用。...如何测试react 路由? 如何测试接口? 希望这篇文章对大家有所帮助,也可以参考往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

2.1K10

如何测试驱动开发 React 组件?

TDD 的过程 编写测试用例 运行测试,测试失败 修改代码 测试通过 重构/优化代码 新增功能,重复上述步骤 image.png 在某种程度上,它可能在初学者看来是单调乏味或者不切实际的,但是严格按照这个步骤来做这件事...但是实际上,将要测试的组件还不存在。 首先通过 getByRole 方法 查找 role属性等于dialog能否文档中找到。...现在我们得到了我们想要的组件渲染的 HTML ,现在想要确保可以从外部传递这个组件的按钮的回调函数,并确保它们在单击按钮时被调用。...创建一个模拟函数,将其作为“onOk”处理函数传递给组件,模拟单击“确认”按钮,并断言函数已被调用。...例如: 如何出测试 react hooks ? 如何测试 react 路由? 如何测试接口? 希望这篇文章对大家有所帮助,也可以参考往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

2.2K10

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

而针对与我们前端来说,认为单测就是:UI测试和逻辑测试,逻辑测试包含:工具类/函数、业务相关代码测试。UI测试分为:公共组件和业务组件测试。 为什么要写单元测试?...每个方法都有不同的使用场景,每个API都会生成一个mock模拟函数,Jest对模拟函数提供了很多方法给予我们模拟方法的返回、实现等等,可移至文档参考 jest.fn jest.fn主要是创建一个模拟函数...,所以并不能直接访问此类属性或方法,但得益于jsdom,它提供了强大的web沙箱环境让我们能直接模拟真实的web环境。...在类中我们可以使用private对方法进行私有化,此时我们在单测时没办法直接访问或者模拟。需要通过对私有成员使用数组访问或者通过prototype属性进行模拟。...set方法,就需要模拟transform,但是private方法不能直接通过jest.spyOn(LocalCache, 'transform')模拟,会导致测试报错并提示Cannot spy the

10.2K20

如何自动化测试 React Native 项目 (下篇) - 单元测试

(在 vuejs 测试中可以用 vue-test-utils) Enzyme 提供了可以直接操作 React component 中的 props 和s tate 的方法,使得建造测试 context...这种方法的特点是只 render 当前组件中一层深的元素, 不会去渲染当前组件中用到的子组件。 这就保证了测当前组件的时候, 不会受到子组件行为的影响。符合分层测试的需求;并且也比较快速。...为什么 Snapshot 在 React 测试中是可靠的呢?...用 shallow 的好处是保证每个组件测试的独立性,比如在当前组件的 snapshot 结构树中, 只关心用到的 childComponent 的名字和传给他什么 prop, 具体这个组件的内部UI...我们的测试脚本可以这么写: // Mock Logger module中的方法, 用jest.fn来实现spy方法 Logger.log = jest.fn(); // setup shallowWrapper

3.2K21

Jest + React Testing Library 单测总结

2、Jest 的使用 Jest 的安装这里就不赘述了,如果使用 create-react-app 来创建项目,Jest 和 React Testing Library(RTL) 都已经默认安装了。...所以,Jest Mock 的意义就在于可以帮助我们完成下面这些事情: 有些模块可能在测试环境中不能很好地工作,或者对测试本身不是很重要,使用虚拟数据来 mock 这些模块,可以使你为代码编写测试变得更容易...2.3.1 jest.fn() 通过 jest.fn(implementation) 可以创建 mock 函数。如果没有定义函数内部的实现,mock 函数会返回 undefined。...所以,相信借助于测试的力量,这些痛点终有一天会逐个击破。 就像开头提到的,本文只是“比较粗略”地浏览了 Jest + RTL,相较于整个前端单测来说只是冰山一角。...希望在日后工作的每一天能不断地探索这个领域,也希望在不久的将来,也能 “快乐编码,自信发布”。 紧追技术前沿,深挖专业领域 扫码关注我们吧!

4.5K20

单元测试

代码信心的体现 测试可以确保得到预期的结果 作为现有代码行为的描述 促使开发者写可测试的代码,可测试的代码可读性会更高 如果依赖的组件有修改,受影响的组件能在测试中发现错误 测试内容 什么是细节?...testing-playground 是一个交互式的沙盒 (网页),你可以在其中用鼠标选择 DOM 节点,testing-playground 会告诉你查找此 DOM 节点的最佳查询规则。...(Promise.resolve({})), scrollToField: jest.fn() }, submitFormData: jest.fn() }; return...检查测试用例代码中是否存在任何可能导致测试环境污染或干扰的因素,例如全局状态、全局变量等。尽量将测试用例代码进行封装和隔离,以确保每个测试的独立性。...act 的使用场景如下: 当你在测试中进行与 React 组件的交互(例如模拟用户点击、输入等)时,可以使用 act 来确保组件在更新后进行正确的断言。

18410

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

1.2 Enzyme Enzyme是AirBnb开源的React测试工具库,通过一套简洁的api,可以渲染一个或多个组件,查找元素,模拟元素交互(如点击,触摸),通过和Jest相互配合可以提供完整的...二、环境配置 直接贴上所需要安装的依赖: "devDependencies": { "@testing-library/react-hooks": "^3.2.1", //React...= { preset: 'react-native', globals: { //模拟全局变量 _window: {}, __DEV__: true, }, setupFiles...8.1 测试组件模拟交互 const onClickLabel = jest.fn(); const label = shallow(<Label filterData={filterData} onClickLabel...; 通过单元测试,给项目带来了不少好处: 通过单元测试可以确保代码得到预期的结果,在测试环境中就发现bug; 当修改依赖的组件时,能在测试中发现被影响组件的错误,这样可以支持我们更好的重构代码,有利于项目的长期迭代

6K30

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

前端自动化测试实践03—jest异步处理&mock TOC Write By CS逍遥剑仙 的主页: www.csxiaoyao.com GitHub: github.com/csxiaoyaojianxian...done) => { fetchData1((data) => { expect(data).toEqual({ success: true }); // 如果写...done(),当接口404会导致用例执行 done(); }) }) 【2】返回 promise 处理成功,需要指定返回 expect 数量,否则可能直接走失败分支跳过 test...=> { expect(response.data).toEqual({ success: true }); }) }) 处理失败,需要指定返回 expect 数量,否则可能直接走成功分支跳过.../mock'); 4. mock - function 模拟函数调用 对于单元测试,无需关心外部传入的函数的实现,使用 jest.fn 生成一个 mock 函数,可以捕获函数的调用和返回结果,以及this

5.1K85

React 组件进行单元测试

React 单元测试中用到的工具 III. 用测试驱动 React 组件重构 IV. React 单元测试常见案例 I....React 单元测试中用到的工具 Jest 不同于"传统的"(其实也没出现几年)的 jasmine / Mocha / Chai 等前端测试框架 -- Jest的使用更简单,并且提供了更高的集成度、更丰富的功能...用测试驱动 React 组件重构 这里展开讨论经典的 “测试驱动开发”(TDD - test driven development) 理论 -- 简单的说,把测试正向加诸开发,先写用例再逐步实现,就是.../modal 在一个项目中用到了 react-bootstrap 界面库,测试一个组件时,由于包含了其 Modal 模态弹窗,而弹窗组件是默认渲染到 document 中的,导致难以用普通的 find...方法等获取 解决的办法是模拟一个渲染到容器组件原处的普通组件: //FakeReactBootstrapModal.jsimport React, {Component} from 'react';class

4.2K40

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

Stub 用于模拟特定行为 const mockFn = jest.fn(); mockFn(); expect(mockFn).toHaveBeenCalled(); // With a mock...,jest.fn() 代表着就是一个 Stub(桩),“你来就在这里,你走也依然在这里,风雨无阻”。...不需要什么输入输出,只要能在测试的时候验证到 Stub 被调用过就行,也就能够断言到某处代码被执行,从而确定代码被测试所覆盖。...而另一种特定行为就是返回特定的数据,即 Stub 也可以根据输入模拟返回一种输出,作为某些模块的替身帮它演戏,比如“小鲜肉们”遇到要跳车啦、要卿卿(误)的时候就要找替身,“一二三四五六七八”连台词都不用背还需要配音...未完待续…… ## 单元测试基础 ### 单元测试与自动化的意义 ### 为什么选择 Jest ### Jest 的基本用法 ### 该如何测试异步代码?

2.2K20

React Hook测试指南

React为什么需要Hook中我们探讨了React为什么需要引入Hook这个属性,在React Hook实战指南中我们深入了解了各种Hook的详细用法以及会遇到的问题,在本篇文章中将带大家了解一下如何通过为自定义...programming)里面,单元就是我们封装的方法(function),在面向对象的编程语言(object-oriented programming)里面单元是类(class)的方法(method),我们一般推荐将某个类或者某个模块直接作为单元测试的单元...mock 在Jest框架中用来进行mock的方法有很多,主要用到的是jest.fn()和jest.spyOn()。...总结 在本篇文章中给大家介绍了什么叫做单元测试,为什么我们需要在自己的项目里面引入单元测试以及教大家如何使用Jest和react-hooks-testing-library来测试我们自定义的hook。...这篇文章是React hook系列文章的最后一篇了,后面还会持续为大家分享一些和hook相关的内容,大家敬请期待。

1.7K10

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

今天把自己的笔记分享出来,和大家一起交流在2个较为复杂的Vue业务系统中落地单测的一些思路和方法,算是入门实践类的笔记,资深大佬还请跳过。...VScode vscode-jest-runner 插件配置 作用:VS Code打开测试文件后,可直接运行用例。 ? 运行效果: ? 不通过效果: ?...3. githook 配置 作用:在提交时执行所有测试用例,有测试用例不通过或覆盖率达标时取消提交。 ? ?...落地单元测试 ❌ 直接对一个较大的业务组件添加单元测试,需要模拟一系列的全局函数,无法直接运行。...image.png 原有逻辑:系统参数存全局变量,自定义参数存全局变量 无法看出多少种类型与接口数量 无法在多个位置直接复用 getCondition (fIndex, oneFunnel) { //

3.9K30

浅谈前端测试

只要写完代码可以补测试,并且补出高效的测试,前端或许真的不需要手点   大前端时代不谈环境不成方圆,本文从下面几个环境一一分析下如何敏捷测试   node 环境   vue 环境   nuxt 服务端渲染环境   react...,由于 readFileSync 方法可能存在多种返回结果(成功或报错),所以暂时用 jest.fn() 模拟   other 里面则是放一些固定的测试数据(不会随着测试过程而改变)   beforeAll...进来的 fs 模块拦截调,也是本测试用例中的关键步骤   在第一个 test 里面我们改写 mocks.fs.readFileSync 的返回形式,这里使用的 mockImplementation 是直接模拟了一个执行函数...spy,这里 console 是全局对象 global 上的方法,我们没有 require 将其引入,所以 jest.mock 显然处理上有些吃力,这时候 spy 就派上用场了,beforeAll 钩子里直接执行.../getId')  const mocks = {  list: [{  id: 1,  name: 'vue'  }, {  id: 2,  name: 'react'  }]  }  test('return

1.7K10

如何测试 React 异步组件?

前言 本文承接上文 如何测试驱动开发 React 组件?,这次将继续使用 @testing-library/react 来测试我们的 React 应用,并简要简要说明如何测试异步组件。...react-hook-form 测试提交 接下来测试下 onSubmit 方法必须包含 username 和 password, 我们需要模拟用户输入,这个时候我们需要安装 @test-library.../button> {message} ); } export default Login; 测试登录失败 我们直接复制成功的测试用例...; // mock 登录函数失败 const login = jest.fn().mockRejectedValueOnce({ data: { message },...请关注,我会尽快出 React test 系列的下文。 希望这篇文章对大家有所帮助,也可以参考往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

3.3K50

提高代码质量——使用Jest和Sinon给已有的代码添加单元测试

为什么没有用其他的单元测试框架 在最开始的框架选择中,先尝试了能够并行测试,大大提高单元测试速度的ava框架。...的问题时,通过官方issue中的极其复杂的配置也没有能够解决出现Cannot find module的问题(其中一个解决此问题的插件babel-plugin-webpack-loaders中竟然是推荐直接使用...(); // jest是一个注册的全局变量 handleUserData(callback); expect(callback.mock.calls.length).toBe(1);...collectCoverageFrom": [ // 指定统计单元测试覆盖率文件 "**/src/**.js" ], } } 如何设置单元测试文件不使用ES2015配置 如果你的项目中有.babelrc文件,而你希望单元测试文件受到...关于Jest是如何测试JavaScript代码以及Sinon是如何模拟XMLHttpRequest请求的,我们将会在后面几篇博客中给大家带来相关的源码解析,有兴趣的同学可以关注,留意后续的文章。

3.7K00

【总结】1796- 原生 canvas 如何实现大屏?

作者: 小丑依然是 https://juejin.cn/post/7165564571128692773 前言 可视化大屏该如何做?有可能一天完成吗?...,你只需 5 分钟就能上手 如何缓存函数,当入参不变时,直接使用缓存值 千万节点的图如何分片渲染,卡顿页面操作 项目单测该如何写?...函数缓存 为什么需要函数缓存?当然,在这个项目中函数缓存比较鸡肋,为了用而用,试想,如果有一个函数计算量非常大,组件内又有多个 state 频繁更新,怎么确保函数不被重复调用呢?...可能大家会想到 useMemo``useCallback等手段,这里要介绍的是 React 官方的 cache 方法,已经在 React 内部使用,但未暴露。.../cache.test.ts: import { cache } from "src/utils"; describe("cache", () => { const primitivefn = jest.fn

21340

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券