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

如何测试 React 异步组件?

前言 本文承接上文 如何测试驱动开发 React 组件?,这次我将继续使用 @testing-library/react 来测试我们 React 应用,并简要简要说明如何测试异步组件。...如何测试(鼠标)事件发出异步请求 ? ---- 对于异步组件,有两件步骤需要进行测试: 第一:测试异步方法本身有没有被调用,并且传了正确参数。 第二:在调用之后,应用程序应该做出响应。...get*By* 函数获取dom 中元素, 这里使用 getByPlaceholderText 以上测试用例只测试了登录函数,但是我们并未写登录成功或者失败逻辑,接下来来我们通过 jest mock...(); }); 通过 toHaveBeenCalledTimes 测试调用次数,通过 toHaveBeenCalledWith 测试调用方法参数,虽然这边是空数据,但是我们也可以写,确保调用参数是空...; 测试异步方法是否被正确调用,并且带上了正确参数; 测试组件是否正确地渲染了数据 测试异步方法错误时,组件是是否渲染了正确状态 文中关于登录成功后页面跳转并未测试,那么如何测试 react 路由

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

怎么给测试代码做抽象才是有意义

不知道大家在写前端单测时候,是否有出现测试代码和测试数据重复冗余情况?然后不得不写一些函数和类来封装他们。然而,慢慢地会发现:过度封装会致使你测试用例变得越来越难读。...我对这如何适用于编写可维护测试有不一样感觉。...还有,为什么要在第一个用例里 blogPostController.loadBlogPosts(req, res, next) 调用 res.json 里要返回 Post,而第二个用例却没有返回呢?...所以,为了更好地处理这种情况,你可以思考以下两个问题: 你测试用例是否能够很快让人看懂它们之前差异以及这些差异来源。...jest-in-case 和 test.each 如果你只是做纯函数测试,那么你很幸运,因为它们都是最容易测。你完全可以通过简单抽象来简化测试代码,让它们在调用时更明显地展示输入和输出内容。

70620

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

: automock: 告诉 Jest 所有的模块都自动从 mock 导入. clearMocks: 在每个测试前自动清理 mock 调用和实例 instance collectCoverage: 是否收集测试时覆盖率信息...():用来判断 mock function 是否调用过 toHaveBeenCalledTimes(number):用来判断 mock function 被调用次数 assertions(number...返回,测试函数就会结束。...在单元测试中,我们可能并不需要关心内部调用方法执行过程和结果,只想知道它是否被正确调用即可,甚至会指定该函数返回值。这个时候,mock意义就很大了。...expect(mockFn).toHaveBeenCalledWith('厦门','青岛','三亚'); }) jest.fn()所创建mock函数还可以设置返回值,定义内部实现或返回Promise

4.9K20

Jest + React Testing Library 单测总结

1.3 组件单测须知 在开始进行组件单测时候,有几个因素我们需要考虑: 组件是否按照既定条件 / 逻辑进行渲染 组件事件回调是否正确 异步接口如何校验 异步执行完毕后操作如何校验 .........如果想要看如何安装 Jest,可以参考:Jest 上手。 Jest 常用配置项在根目录中 jest.config.js 中,常用配置可以参考:Jest 配置文件。...在组件单测中,有的时候我们可能只关注一个函数是否被正确地调用了,或者只想要某个函数返回值来支持该组件渲染逻辑是否正确,而并不关心这个函数本身逻辑。...// 定义一个 mock 函数,因为没有函数体,所以 mockFn 会 return undefined const mockFn = jest.fn(); // mockFn 调用 mockFn(...(2); // 断言mockFn传入参数为a,b,c expect(mockFn).toHaveBeenCalledWith('a','b','c'); // 定义implementation,自定义函数体

4.5K20

单元测试

交互),推荐单测之前已评审过测试用例 公共类 公共组件 公共方法 公共自定义hook 需求功能类 组件Props(组件入参是否在正确场景或时机被正确使用调用) Render 交互(基于用户交互判断关键节点流程是否在正确时机被正确执行...注意: 测试覆盖率可以让我们自检路径覆盖、判定覆盖及语句覆盖,指导我们更好提前发现代码中问题 覆盖率数据只能代表你测试过哪些代码,不能代表你是否测试好这些代码。...(expect.any(Function), 1000); }); }); Mock 网页地址 describe("网页地址Mock", () => { test("可以获取当前网址查询参数对象...检查测试用例代码中是否存在任何可能导致测试环境污染或干扰因素,例如全局状态、全局变量等。尽量将测试用例代码进行封装和隔离,以确保每个测试独立性。...因此,callback 可在不确定时间和频率(在间隔以及 DOM 变化时调用)被调用(或者检查错误)。所以这也意味着你副作用可能会被多次调用

20210

测试中如何处理 Http 请求?

但是,这里缺点在于:它不能测 headers 里是否会带有 Content-Type: application/json。 没有这一步,我们也不能确定服务器是否真的能处理发出去请求。...示例 有了上面的介绍,现在来看看 msw 是如何 Mock Server : // server-handlers.js // 放在这里,不仅可以给测试用也能给前端本地使用 import {rest}...: 不用管 fetch 函数里实现细节 当调用 fetch 时有报错,那么真实 Server Handler 不会被调用,而且我测试也会失败,可以避免提交有问题代码 可以在前端本地开发时复用这些...对于自定义场景,msw 可以在运行时允许你在测试用例中添加自定义 Server Handler,也可以一键重置成你原来 Handler,以此保留隔离性。...,还能实现场景自定义

1.2K10

Jest来给React完成一次妙不可言~单元测试

需要什么样测试 软件测试是有级别的,下面是《Google软件测试之道》一书中,对于测试认证级别的定义,摘录如下: •级别1 •使用测试覆盖率工具。•使用持续集成。•测试分级为小型、中型、大型。...官方文档在这里[6],如果要指定的话,如下值是对官方文档简单摘录: •container:React Testing库将创建一个div并将该div附加到文档中。而通过这个参数,可以自定义容器。...测试当我们点击链接时,它是否参数导航到其他页面: 现在,要检查导航是否工作,我们必须触发导航链接上单击事件。...对于第一个测试,我们检查内容是否等于About页面中文本,对于第二个测试,我们测试路由参数并检查它是否正确通过。 现在我们可以进入最后一节,学习如何测试Axios请求。 8....最后,我们将使用Jest函数mockResolvedValueOnce()来传递模拟数据作为参数。 现在,对于第二个测试,我们可以单击按钮来获取数据并使用async/await来解析它。

14.8K33

React 应用架构实战 0x7:测试

在这一节中,我们将学习如何使用不同测试方法来测试我们应用程序。这将使我们有信心对应用程序进行重构、构建新功能和修改现有功能,而不用担心破坏当前应用程序行为。...# 单元测试 单元测试是在应用程序单元在不依赖于其他部分情况下进行独立测试。 对于单元测试,我们将使用 Jest,它是 JavaScript 应用程序最流行测试框架。...集成测试更有价值,因为它们可以更有全面地测试应用程序,我们会测试不同部分功能、它们之间关系以及它们通信方式。 对于集成测试,我们将使用 Jest 和 React Testing Library。...这是一种很好方法,可以以用户使用应用程序方式测试应用程序功能。 在 src/testing/test-utils.ts 中,我们可以定义一些测试中可以使用实用工具。...通常,这些测试通过自动化方式运行整个应用程序,包括前端和后端,并验证整个系统是否正常。

1.6K80

React 组件测试技巧

React 组件常见测试模式。 注意: 此页面假设你正在使用 Jest 作为测试运行器。如果你使用不同测试运行器,你可能需要调整 API,但整体解决方案是相同。...--- 渲染 {#rendering} 通常,你可能希望测试组件对于给定 prop 渲染是否正确。...; }); --- 数据获取 {#data-fetching} 你可以使用假数据来 mock 请求,而不是在所有测试中调用真正 API。...使用“假”数据 mock 数据获取可以防止由于后端不可用而导致测试不稳定,并使它们运行得更快。注意:你可能仍然希望使用一个"端到端"框架来运行测试子集,该框架可显示整个应用程序是否一起工作。...在上面,我们通过调用 jest.useFakeTimers() 来启用它们。它们提供主要优势是,你测试实际上不需要等待 5 秒来执行,而且你也不需要为了测试而使组件代码更加复杂。

4.9K00

万字详文:彻底搞懂 Jest 单元测试框架

,但 Jest如何工作我们可能还很陌生,那让我们一起走进 Jest 内心,一同探究单元测试引擎是如何工作。...对于这两种情况,你可以通过将测试视为:检查该函数是否产生预期结果。最典型测试流程如下所示: 导入要测试函数 给函数一个输入 定义期望输出 检查函数是否产生预期输出 一般,就这么简单。...模拟 在复杂测试场景,我们一定绕不开一个 Jest 术语:模拟(mock) 在 Jest 文档中,我们可以找到 Jest 对模拟有以下描述:”模拟函数通过抹去函数实际实现、捕获对函数调用,以及在这些调用中传递参数...怎么模拟一个函数 接下来我们就要研究一下如何实现,首先是 jest.mock,它第一个参数接受是模块名或者模块路径,第二个参数是该模块对外暴露方法具体实现 const jest = { mock...而 jest.fn 实现也不难,这里我们使用一个闭包 mockFn 把替换函数和参数给存起来,方便后续测试检查和统计调用数据。

7.6K20

【干货分享】微信小程序单元测试攻略

然而要做好测试也有一定困难: 1,花费时间长。 2,被测代码包含复杂环境因素需要处理或模拟,例如使用了storage、调用了接口、使用了环境变量等。...(图片来源:码农翻身公众号) 但无论如何,有价值东西就应该去做,不应该知难而退嘛。 接下来给大家介绍一下测试框架。...mock测试文件中导入文件 automock: false, testRunner: 'jasmine2', // 测试文件执行前会先执行该文件,用来给Jest测试函数加代理从而收集测试用例...多选择器并集:#a-node, .some-other-nodes ‍ 2.3.2.3 确认用户操作是否正确响应: 要感知事件是否响应,我们需要使用spyOn方法。...该方法和sinon.spy一样,生成函数“间谍”,可以断言该函数调用次数、调用入参、调用返回等是否符合预期。

2.6K40

使用 React Testing Library 15 个常见错误

接下来,我就一一盘点这些方法,解释为什么它们不是很好,以及如何改进测试以避免这些陷阱。 注:下面是重要程度说明。...强烈建议大家使用 jest-dom,因为你能获得更好错误信息。...唯一好处是可以用来判断这个元素是否没有被渲染到页面上。...因此,callback 可在不确定时间和频率(在间隔以及 DOM 变化时调用)被调用(或者检查错误)。所以这也意味着你副作用可能会被多次调用!...建议:如果你想断言某个东西是否存在,那么就做显式断言操作 总结 作为测试库工具系列维护者,我们尽最大努力使 API 能够引导人们尽可能有效地使用,一些不足之处,我们会尝试正确地记录下来,即使这会非常地困难

1.2K20

JavaScript 测试系列实战(一):使用 Jest 和 Enzyme 测试 React 组件

本篇教程是 JavaScript 测试系列实战 第一篇教程,首先介绍了测试类型,然后主要通过一个 React 项目教会你如何使用 Jest 编写第一个测试,然后使用 Enzyme 对 React 组件进行浅层渲染...Jest 测试,我们来详细讲解一下: 我们先导入需要测试单元/模块 test 函数定义了一个测试用例,第一个参数就是用例描述,一般是一句完整描述,例如上面的 dividing 6 by 3 equals...2 ;第二个参数则是一个待执行测试函数测试函数中,最重要组成部分就是断言(Assertion),例如上面的 expect(divide(6, 3)).toBe(2) 断言核心是 expect...函数,它接受一个表达式,然后后面可以调用 Matcher 来测试该表达式是否符合条件,例如这里我们就使用了最常用 toBe Matcher;Jest 还提供了大量 Matcher,可以帮助我们写出更简洁可读断言语句...Jest 测试文件中使用它。

2.9K10

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

Jest配置 安装依赖包 需要使用Jest,首先你需要进行安装,执行以下命令: npm install jest -D 如果你项目中存在.babelrc文件(使用了babel 6)时,不论你测试代码是否通过...通过上面三类测试,我们基本能够覆盖现有项目中所有代码。 同步函数测试 同步函数测试过程是这几个中最简单一部分,我们可以测试函数返回值,也能够测试传入高阶函数。...('hjava'); // 判断了callback函数第一次被调用第一个参数为'hjava' }); 从上面的示例中我们可以看到,针对同步纯函数,我们可以通过很简单单元测试模型来验证它功能。...在本章中,我们总结了如下问题来进行介绍,希望大家再遇到相同问题时能够快速解决: 如何统计Jest单元测试覆盖率 如何设置单元测试文件不使用本地babel配置 如何设置单元测试文件使用本地babel配置...webpack alias问题 如果我们在项目中使用了webpack,那么我们很大概率会使用到alias相关属性来定义路径。

3.7K00

用于浏览器中视频渲染时间管理 API

、确定性渲染;2)通过各种技术优化性能;3)如何测试基于时间状态(或者,如何在测试中进行时间移动);4)如何将各种类型媒体(视频、字幕等)与单一事实来源同步。...其他一些组件(比如时间码、字幕)会根据播放与否以及播放开始时间运行一个循环。当在循环中时,会利用当前时间计算一些其他状态参数,比如哪些单词是活动并作出相应反应。...为了解决这一问题,需要用设置超时替换 requestAnimationFrame 并使用 Jest useFakeTimers 功能,在 Jest 超时中关闭实时。...我们需要确保无论时间何时发生改变,测试函数都会被调用。所以首先需要将时间设置为 0。...然后用 usePlayback 启用播放,将时间提前 50ms ,并通过 Jest 移动 50ms 来触发一帧,这将触发之前设置超时调用,这就提供了一种逐帧推进时间方法,以便我们可以更加精细地进行测试

2.3K10

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券