React 基础知识~单元测试/异步测试

当我测试异步操作时,我在测试代码中使用 async/await。

我需要准备测试数据。在本例中,我使用 json 服务器。

・mock/db.json

{  "users": [    {      "id": 1,      "name": "foo"    }  ]}

・package.json

 "scripts": {    "dev": "vite",    "start": "vite",    "build": "vite build",    "test": "vitest",    "preview": "vite preview",    // ↓ setting a script for json server    "json-server": "npx json-server -w ./mock/db.json -p 4030"  },

然后我必须运行命令。

 npm run json-server

・src/example.js

import getuserdata from "./components/getuserdata";//the path of test dataexport const endpoint_url = 'http://localhost:4030/users/1';const example = () => {  return (              

・src/components/getuserdata.jsx

import { useeffect, usestate } from "react";import axios from "axios";const getuserdata = ({ url }) => {  const [userdata, setuserdata] = usestate(null);  useeffect(() => {    axios.get(url).then((response) => setuserdata(response.data));    // eslint-disable-next-line react-hooks/exhaustive-deps  }, []);  return (    
{userdata ? (

profile

  • id: {userdata.id}
  • name: {userdata.name}
...loading )}
);};export default getuserdata;

・src/components/getuserdata.test.jsx

import { render, screen } from "@testing-library/react";import getuserdata from "./getuserdata";import { endpoint_url } from "../example";describe("check an action of the getuserdata component", () => {  test("external data fetching in progress", () => {    render();    const h1el = screen.getbyrole("heading", { name: "...loading" });    expect(h1el).tobeinthedocument();  });  ★ not using  async/await  test("after external data fetching",  () => {    render();    const h2el =  screen.findbyrole("heading", { name: "profile" });    expect(h2el).tobeinthedocument();    const itemels =  screen.findallbyrole("listitem");    expect(itemels[0].textcontent).tobe("id: 1");    expect(itemels[1].textcontent).tobe("name: foo");  });});

如果我不使用 async/await,测试会在 expect(h2el).tobeinthedocument(); 处失败。

React 基础知识~单元测试/异步测试

因为测试在没有用户数据的情况下继续进行。

・src/components/getuserdata.test.jsx

import { render, screen } from "@testing-library/react";import GetUserData from "./GetUserData";import { ENDPOINT_URL } from "../Example";describe("Check an action of The GetUserData component", () => {  test("External data fetching in progress", () => {    render();    const h1El = screen.getByRole("heading", { name: "...loading" });    expect(h1El).toBeInTheDocument();  });  ★ Using  async/await  test("After external data fetching", async () => {    render();    const h2El = await screen.findByRole("heading", { name: "Profile" });    expect(h2El).toBeInTheDocument();    const itemEls = await screen.findAllByRole("listitem");    expect(itemEls[0].textContent).toBe("ID: 1");    expect(itemEls[1].textContent).toBe("Name: Foo");  });});

如果我使用async/await,测试就会成功。

React 基础知识~单元测试/异步测试

显示

React 基础知识~单元测试/异步测试

以上就是React 基础知识~单元测试/异步测试的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1494120.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Vue 首次登录成功后,为什么在方法中无法获取 Store 值?
上一篇 2025年12月19日 16:17:51
如何在实际项目中使用 JavaScript 类
下一篇 2025年12月19日 16:18:07

相关推荐

  • 奥特曼和量子计算奠基人讨论 GPT-8

    奥特曼和量子计算奠基人讨论 GPT-8奥特曼和量子计算奠基人讨论 GPT-8奥特曼和量子计算奠基人讨论 GPT-8奥特曼和量子计算奠基人讨论 GPT-8

    老天奶,奥特曼对 gpt 的谈论,都跨越好几代来到 gpt-8 了! 最近他在一档节目上,和量子计算奠基人戴维多伊奇(David Deutsch)展开对话,针对两人存在分歧的 “AI 能否发展为具备意识的超级智能” 议题,奥特曼搬出 GPT-8 来试图说服多伊奇: GPT-8…

    2026年10月7日 • 用户投稿
    700
  • 盐选书阁在线阅读 盐选书阁在线阅读入口

    盐选书阁是知乎App内的数字阅读板块,集成海量精品图书与专栏,涵盖多领域内容,通过“盐选”标准严选优质读物,融合知乎问答生态,支持多种阅读模式,用户可直接在知乎App中搜索进入,享受沉浸式阅读体验。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜…

    2026年10月7日
    000
  • 使用云 Firestore 在服务器端处理数据:优化 Android 应用性能

    正如上面摘要所述,本文旨在解决 Android 应用中使用 Cloud Firestore 时,将数据处理逻辑从客户端转移到服务器端,从而优化应用性能和减小客户端代码体积的问题。通过将数据查询和转换操作放在服务器端执行,可以减少客户端的计算负担,提升应用响应速度,并简化客户端代码。文章将提供具体的代…

    2026年10月7日
    000
  • 深入理解DynamoDB GSI唯一性约束:挑战与最佳实践

    深入理解DynamoDB GSI唯一性约束:挑战与最佳实践深入理解DynamoDB GSI唯一性约束:挑战与最佳实践深入理解DynamoDB GSI唯一性约束:挑战与最佳实践深入理解DynamoDB GSI唯一性约束:挑战与最佳实践

    在DynamoDB中,直接通过PutItemRequest的ConditionExpression来强制执行全局二级索引(GSI)属性的跨项唯一性是无效的。该条件表达式仅检查当前待插入项的属性是否存在,而非整个索引或表的全局唯一性。实现GSI唯一性通常需要重新思考表的主键设计,将需要唯一性的属性纳入…

    2026年10月7日 • 用户投稿
    100
  • 《模拟农场25》新内容扩展包将于9月9日发布

    《模拟农场25》新内容扩展包将于9月9日发布《模拟农场25》新内容扩展包将于9月9日发布《模拟农场25》新内容扩展包将于9月9日发布《模拟农场25》新内容扩展包将于9月9日发布

    来源:官方 《Farming Simulator 25》 全新内容扩展包“Mercedes-Benz Trucks Pack”即将上线,发布日期定于9月9日 风靡全球、累计销量已突破300万份的《Farming Simulator 25》宣布,其最新扩展内容“Mercedes-Benz Trucks…

    2026年10月7日 • 用户投稿
    100
  • 海棠书屋在线阅读中心-稳定海棠书屋小说网址入口

    海棠书屋在线阅读中心-稳定海棠书屋小说网址入口海棠书屋在线阅读中心-稳定海棠书屋小说网址入口海棠书屋在线阅读中心-稳定海棠书屋小说网址入口海棠书屋在线阅读中心-稳定海棠书屋小说网址入口

    海棠书屋在线阅读中心的网址入口是haitangshuwu.com,该平台提供涵盖青春校园、玄幻、穿越、悬疑推理、科幻等多种题材的小说资源,拥有个性化阅读推荐、用户互动社区等功能。 海棠书屋在线阅读中心-稳定海棠书屋小说网址入口在哪里?这是不少网友都关注的,接下来由php小编为大家带来海棠书屋在线阅读…

    2026年10月7日 • 用户投稿
    300
  • 如何在composer.json中定义项目的元数据(如作者、许可证)?

    如何在composer.json中定义项目的元数据(如作者、许可证)?如何在composer.json中定义项目的元数据(如作者、许可证)?如何在composer.json中定义项目的元数据(如作者、许可证)?如何在composer.json中定义项目的元数据(如作者、许可证)?

    在composer.json中定义元数据需使用JSON格式,authors字段以数组形式列出作者信息,每个作者包含name、email和可选homepage;license字段声明许可证类型,支持单个或多个许可证;description为必填项,keywords、homepage和支持链接等字段有助…

    2026年10月7日 • 用户投稿
    100
  • AMD谈AI显卡:没有性能就没有人买 推理一直有优势

    AMD谈AI显卡:没有性能就没有人买 推理一直有优势AMD谈AI显卡:没有性能就没有人买 推理一直有优势AMD谈AI显卡:没有性能就没有人买 推理一直有优势AMD谈AI显卡:没有性能就没有人买 推理一直有优势

    9月5日,gpu显卡不仅是决定游戏体验的核心硬件,更成为ai领域各大科技企业争夺的关键战场。目前,nvidia占据超过90%的市场份额,处于绝对领先地位,而amd正持续发力,试图打破格局。 在近日举行的花旗TMT大会上,AMD首席财务官Jean Hu就公司如何应对竞争发表了看法。她透露了AMD在AI…

    2026年10月7日 • 用户投稿
    1000
  • win11系统服务哪些可以禁用以提升性能_Win11性能优化可禁用服务清单

    win11系统服务哪些可以禁用以提升性能_Win11性能优化可禁用服务清单win11系统服务哪些可以禁用以提升性能_Win11性能优化可禁用服务清单win11系统服务哪些可以禁用以提升性能_Win11性能优化可禁用服务清单win11系统服务哪些可以禁用以提升性能_Win11性能优化可禁用服务清单

    禁用非必要服务可提升Windows 11性能。依次在服务管理器中将DiagTrack、Windows Search、SysMain、Print Spooler、Xbox相关服务及WMPNetworkSvc的启动类型设为禁用,并停止其运行,以降低资源占用。 如果您发现Windows 11系统运行缓慢或…

    2026年10月7日 • 用户投稿
    100
  • ​史上首款DX12游戏续作《奇点灰烬2》预告公开:现可添加至愿望单

    ​史上首款DX12游戏续作《奇点灰烬2》预告公开:现可添加至愿望单​史上首款DX12游戏续作《奇点灰烬2》预告公开:现可添加至愿望单​史上首款DX12游戏续作《奇点灰烬2》预告公开:现可添加至愿望单​史上首款DX12游戏续作《奇点灰烬2》预告公开:现可添加至愿望单

    开发商​oxide games​​与发行商 ​stardock entertainment​​近日发布了2016年即时战略游戏《奇点灰烬》的续作《奇点灰烬2》的全新预告片,目前游戏已上线steam商店页面,玩家可以将其添加至愿望单。 Steam商店页面>>> 游戏预告: 预告片主要…

    2026年10月7日 • 用户投稿
    100
  • Java响应式编程的背压处理策略

    Java响应式编程的背压处理策略Java响应式编程的背压处理策略Java响应式编程的背压处理策略Java响应式编程的背压处理策略

    响应式编程需要背压机制,是因为它能解决生产者与消费者速度不匹配导致的内存溢出或系统崩溃问题。1. 背压通过“拉取”机制让消费者主动控制接收数据量,确保系统稳定性;2. 常见策略包括缓冲、丢弃、错误和限速,分别适用于数据完整性要求高、可接受丢失、需立即报错及需源头控速的场景;3. 自定义subscri…

    2026年10月7日 • 用户投稿
    100
  • 如何安装非商店版本的谷歌浏览器插件_离线安装CRX文件详细教程

    如何安装非商店版本的谷歌浏览器插件_离线安装CRX文件详细教程如何安装非商店版本的谷歌浏览器插件_离线安装CRX文件详细教程如何安装非商店版本的谷歌浏览器插件_离线安装CRX文件详细教程如何安装非商店版本的谷歌浏览器插件_离线安装CRX文件详细教程

    1、服务器IP无法解析时可尝试通过Chrome安装插件解决;2、先开启浏览器开发者模式;3、拖拽CRX文件或解压后加载已解包扩展;4、必要时改后缀为ZIP再解压安装。 如果您尝试访问某个网站,但服务器无法访问,则可能是由于服务器 IP 地址无法解析。以下是解决此问题的步骤: 本文运行环境:MacBo…

    2026年10月7日 • 用户投稿
    200
  • 采访《战地风云6》开发团队:战术破坏系统彻底改变了战场

    采访《战地风云6》开发团队:战术破坏系统彻底改变了战场采访《战地风云6》开发团队:战术破坏系统彻底改变了战场采访《战地风云6》开发团队:战术破坏系统彻底改变了战场采访《战地风云6》开发团队:战术破坏系统彻底改变了战场

    《战地风云6》多人模式揭秘活动香港站近日顺利举行,感谢ea的邀请,本次有幸亲临现场提前体验了本作的多人玩法,并在试玩后与《战地风云6》开发团队进行了深入交流。受访成员来自瑞典dice工作室,分别是项目经理 anna norrevik 以及游戏设计师 jac carlsson,他们分享了本作背后的开发…

    2026年10月7日 • 用户投稿
    200
  • DeepSeek+Outlook:邮件智能撰写与自动分类技巧

    DeepSeek+Outlook:邮件智能撰写与自动分类技巧DeepSeek+Outlook:邮件智能撰写与自动分类技巧DeepSeek+Outlook:邮件智能撰写与自动分类技巧DeepSeek+Outlook:邮件智能撰写与自动分类技巧

    deepseek通过自然语言处理快速生成高质量邮件草稿,提升撰写效率;outlook利用分类规则自动整理邮件,实现高效管理。结合使用两者可显著提高工作效率。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 利用DeepSeek和Outlook…

    2026年10月7日 • 用户投稿
    100
  • 如何使用ThinkPHP6实现CRM管理系统

    随着企业的发展,客户数量逐渐增加,管理客户信息变得越来越重要。为了解决这一问题,很多企业选择了使用crm(客户关系管理系统)来管理客户信息。而现在,使用php框架thinkphp6来实现一个高效的crm管理系统也成为了一种不错的选择。本文将介绍如何使用thinkphp6来实现crm管理系统。 环境搭…

    用户投稿 2026年10月7日
    100
  • 使用自定义验证器验证Spring Boot请求体中的字符串

    使用自定义验证器验证Spring Boot请求体中的字符串使用自定义验证器验证Spring Boot请求体中的字符串使用自定义验证器验证Spring Boot请求体中的字符串使用自定义验证器验证Spring Boot请求体中的字符串

    本文介绍了如何在Spring Boot中使用自定义验证器来验证请求体中的字符串。通过自定义注解和验证器类,可以实现对请求体字符串的特定格式或内容的校验,从而确保接收到的数据符合预期。本文提供详细的代码示例,帮助开发者理解和应用自定义验证器。 在Spring Boot应用中,对请求数据进行验证是至关重…

    2026年10月7日 • 用户投稿
    000
  • 如何使用Java开发RPA?自动化流程机器人

    如何使用Java开发RPA?自动化流程机器人如何使用Java开发RPA?自动化流程机器人如何使用Java开发RPA?自动化流程机器人如何使用Java开发RPA?自动化流程机器人

    java能用来开发rpa,而且是个相当靠谱的选择。它跨平台、稳定,还有庞大的社区支持,能帮你构建强大且灵活的自动化流程。解决方案:使用java开发rpa,需要关注以下几个核心方面:1.选择合适的框架和库,如selenium用于web浏览器操作,sikulix用于桌面应用自动化,apache poi用…

    2026年10月7日 • 用户投稿
    100
  • 自定义校验器在 Spring Boot 中校验字符串请求体

    自定义校验器在 Spring Boot 中校验字符串请求体自定义校验器在 Spring Boot 中校验字符串请求体自定义校验器在 Spring Boot 中校验字符串请求体自定义校验器在 Spring Boot 中校验字符串请求体

    在 Spring Boot 应用中,我们经常需要对请求体进行校验,以确保接收到的数据符合预期的格式和规范。对于简单的字符串请求体,我们可以通过自定义校验器来实现更灵活的验证逻辑。本文将介绍如何创建一个自定义校验器,用于验证请求体中的字符串是否符合 JSON 格式。 首先,我们需要创建一个自定义注解,…

    2026年10月7日 • 用户投稿
    100
  • 机器人感知大升级!轻量化注入几何先验,成功率提升 31%

    机器人感知大升级!轻量化注入几何先验,成功率提升 31%机器人感知大升级!轻量化注入几何先验,成功率提升 31%机器人感知大升级!轻量化注入几何先验,成功率提升 31%机器人感知大升级!轻量化注入几何先验,成功率提升 31%

    在机器人学习领域,让 ai 真正“看懂”三维世界始终是一个核心挑战。 现有的视觉语言动作(VLA)模型大多基于预训练的视觉语言模型(VLM),仅利用 2D 图像-文本对进行训练,缺乏对真实操作至关重要的 3D 空间感知能力。 虽然当前一些方法通过引入显式深度信息来增强模型,但这类方案通常依赖额外的深…

    2026年10月6日 • 用户投稿
    200
  • 宏碁IFA期间发布多款重磅新品 以硬核科技“智启未来“

    宏碁IFA期间发布多款重磅新品  以硬核科技“智启未来“宏碁IFA期间发布多款重磅新品  以硬核科技“智启未来“宏碁IFA期间发布多款重磅新品  以硬核科技“智启未来“宏碁IFA期间发布多款重磅新品  以硬核科技“智启未来“

    (德国柏林,2025年9月3日)在 ifa 2025 展会期间,宏碁隆重举办 next@acer 全球发布会,以“shape what’s next 智启未来”为核心理念,全面呈现其在人工智能、移动互联与高性能计算领域的前沿探索与创新成果。作为全球科技生态的重要推动者,宏碁不仅以技术革新赢得关注,更…

    2026年10月6日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信