用钩子构建强大的反应应用需要严格的测试。本教程演示了如何使用酶和反应测试库有效测试钩子,并利用待办事项应用程序示例。我们将介绍关键的测试方案和最佳实践,以确保无错误的代码。
本指南熟悉开玩笑和反应测试基本面。如果您不熟悉酶,请考虑在进行之前与JEST在React应用程序中的JEST集成。
测试方案
我们的待办事项组件将在这些情况下进行测试:
- 组件渲染:验证组件成功渲染。
- 初始待办事项显示:确认初始待办事项项目已正确显示。
- 添加一个新的工作:测试添加新项目的功能。
- 删除待办事项:验证删除待办事项的能力。
这是待办事项组件:
导入React,{usestate,useref}来自“ React”; const todo =()=> { const [todos,settodos] = usestate([ {id:1,项目:“ fix bugs”}, {id:2,项目:“取出垃圾”} ); const todoref = useref(); const removetodo = id => { settodos(todos.filter(todo => todo.id!== id)); }; const addtodo = data => { 令ID = todos.length 1; settodos([[ ... todos, { ID, 项目:数据 } ); }; const handlenewtodo = e => { e.preventDefault(); const item = todoref.current; addtodo(item.Value); item.value =“”; }; 返回 ( <div classname="container"> {/ *校正的className to className */} <div classname="row"> {/ *校正的className to className */} <div classname="col-md-6"> {/ *校正的className to className */} <h2 id="添加todo">添加todo</h2> </div> </div> <div classname="row"> {/ *校正的className to className */} <div classname="col-md-6"> {/ *校正的className to className */} <form onsubmit="{handleNewTodo}"> {/ *添加了表格标签 */} <input type="text" ref="{todoRef}" data-testid="input"> {/ *添加了数据测验 */} <button type="submit" data-testid="add-button">添加任务</button>{/ *添加了数据测验 */} </form> </div> </div> <div classname="row todo-list"> {/ *校正的className to className */} <div classname="col-md-6"> {/ *校正的className to className */} <h3 id="列表">列表</h3> {!todos.length? (( <div classname="no-task">没有任务!</div> ):(( <ul data-testid="todos"> {/ *添加了数据测验 */} {todos.map(todo => { 返回 ( <li key="{todo.id}"> {/ *更正的钥匙值 */} <div> {todo.item} <button data-testid="delete-button" onclick="{()"> removetodo(todo.id)}> x</button> {/ *添加了数据测验和onClick */} </div> </li> ); })}} </ul> ) </div> </div> </div> ); }; 导出默认todo;
注意: classname
属性已纠正到上述代码中的className
。同样,已经添加了data-testid
属性,以便使用React测试库更容易测试。
用酶进行测试
-
安装:
npm install --save-dev enzyme enzyme-adapter-react-16
- 酶配置(setUptests.js):
从“酶”进口酶; 从“酶 - 适应器反应16”中进口适配器; emzyme.configure({Adapter:new Adapter()});
- 测试(todo.test.js):
从“反应”中导入反应; 从“酶”导入{浅,山}; 从“ ../ todo”导入todo; 描述(“ todo”,()=> { 它(“ renders”,()=> { 浅的(<todo></todo> ); }); 它(“显示初始待办事项”,()=> { const包装器=安装(<todo></todo> ); 期待(wrapper.find(“ li”))。 }); 它(“添加一个新项目”,()=> { const包装器=安装(<todo></todo> ); wrapper.find(“ input”)。instance()。value =“修复失败测试”; wrapper.find('[type =“ submit”]')。仿真(“ submit”); //模拟提交,而不是点击 期待(wrapper.find(“ li”))。 期待(wrapper.find(“ li”)。last()。text()。tocontain(“修复失败的测试”); //改善断言 }); 它(“删除项目”,()=> { const包装器=安装(<todo></todo> ); wrapper.find('[data-testid =“ delete-button”]')。first()。仿真(“ click”); 期待(wrapper.find(“ li”))。 }); });
用React测试库进行测试
-
安装:
npm install --save-dev @testing-library/jest-dom @testing-library/react
- 测试(todo.test.js):
从“反应”中导入反应; 从“@testing-library/react”中导入{渲染,fireevent,屏幕}; 从“ ../ todo”导入todo; 导入“@testing-library/jest-dom”; 描述(“ todo”,()=> { 它(“显示初始待办事项”,()=> { 使成为(<todo></todo> ); 期望(screet.getByTestId(“ todos”)。儿童。lengtth).tobe(2); }); (“添加一个新的to-do”,()=> { 使成为(<todo></todo> ); fireevent.change(screen.getByTestId(“ input”),{target:{value:“ new Task”}); fireevent.click(screen.getByTestId(“ add-button”)); 期待(screet.getByTestId(“ todos”)。儿童。长度).tobe(3); }); 它(“删除to-do”,()=> { 使成为(<todo></todo> ); fireevent.click(screet.getAllByTestId(“ delete-button”)[0]); 期待(screet.getByTestId(“ todos”)。儿童。 }); });
请记住,根据需要调整项目结构的文件路径。此改进的版本提供了更健壮和可维护的测试。使用data-testid
使测试对组件结构的变化更具弹性。
以上是测试用酶和反应测试库的反应钩子的详细内容。更多信息请关注PHP中文网其他相关文章!

选择Flexbox还是Grid取决于布局需求:1)Flexbox适用于一维布局,如导航栏;2)Grid适合二维布局,如杂志式布局。两者在项目中可结合使用,提升布局效果。

包含CSS文件的最佳方法是使用标签在HTML的部分引入外部CSS文件。1.使用标签引入外部CSS文件,如。2.对于小型调整,可以使用内联CSS,但应谨慎使用。3.大型项目可使用CSS预处理器如Sass或Less,通过@import导入其他CSS文件。4.为了性能,应合并CSS文件并使用CDN,同时使用工具如CSSNano进行压缩。

是的,youshouldlearnbothflexboxandgrid.1)flexboxisidealforone-demensional,flexiblelayoutslikenavigationmenus.2)gridexcelstcelsintwo-dimensional,confffferDesignssignssuchasmagagazineLayouts.3)blosebothenHancesSunHanceSlineHancesLayOutflexibilitibilitibilitibilitibilityAnderibilitibilityAndresponScormentilial anderingStruction

重构自己的代码看起来是什么样的?约翰·瑞亚(John Rhea)挑选了他写的一个旧的CSS动画,并介绍了优化它的思维过程。

CSSanimationsarenotinherentlyhardbutrequirepracticeandunderstandingofCSSpropertiesandtimingfunctions.1)Startwithsimpleanimationslikescalingabuttononhoverusingkeyframes.2)Useeasingfunctionslikecubic-bezierfornaturaleffects,suchasabounceanimation.3)For

@keyframesispopularduetoitsversatoryand and powerincreatingsmoothcssanimations.keytricksinclude:1)definingsmoothtransitionsbetnestates,2)使用AnimatingmatematingmultationmatingMultationPropertiessimultane,3)使用使用4)使用BombingeNtibalibility,4)使用BombingingWithjavofofofofofoffo

CSSCOUNTERSAREDOMANAGEAUTOMANAMBERINGINWEBDESIGNS.1)他们可以使用forterablesofcontents,ListItems,and customnumbering.2)AdvancedsincludenestednumberingSystems.3)挑战挑战InclassINCludeBrowsEccerCerceribaliblesibility andperformiballibility andperformissises.4)创造性

使用滚动阴影,尤其是对于移动设备,是克里斯以前涵盖的一个微妙的UX。杰夫(Geoff)涵盖了一种使用动画限制属性的新方法。这是另一种方式。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。