制定有效的反应组件测试应直观,直接且易于维护。但是,当前的测试库生态系统通常会落后,阻碍开发人员始终如一地编写强大的JavaScript测试。测试REACT组件,DOM经常需要在Jest或Mocha等流行的测试跑者周围更高级别的包装纸。
挑战:乏味而令人困惑的测试
当前的测试方法通常证明是乏味而令人困惑的。表达测试逻辑的类似jQuery的链式风格很麻烦,并且与React的组件体系结构不符。即使是使用酶的看似可读的代码也可能变得过于冗长:
期待(screet.find(“。查看”)。hasclass(“ Technologies”)。to.equal(true); 期待(screen.find(“ h3”)。text())。to equal(“ Technologies:”); 期望(screet.find(“ ul”)。儿童())。 期待(屏幕。 // ... ]))。 期待(screen.find(“ button”)。text())。to equal(“ back”); 期待(screet.find(“ button”)。hasclass(“ small”))。to. equal(true);
这对应于一个相对简单的DOM结构:
<div classname="view technologies"> <h3 id="技术">技术:</h3> <ul> <li>JavaScript</li> <li> Reactjs</li> <li> nodejs</li> <li> webpack</li> </ul> <button classname="small">后退</button> </div>
测试更复杂的组件会放大这些问题,从而使过程更加笨拙。 React生成HTML的原理与测试方法之间的断开连接导致效率低下且难以维护的测试。简单的JavaScript链接不足以用于长期可维护性。
出现了两个关键问题:
- 特定于组件的测试方法:如何有效编写针对组件行为的测试。
- 最小化冗余:如何消除不必要的代码并提高测试可读性。
让我们在探索实际解决方案之前解决这些问题。
一种反应组件测试的重点方法
考虑基本的反应组件:
欢迎功能(道具){ 返回<h1 id="你好-props-name">你好,{props.name}</h1> ; }
此功能接受props
并使用JSX返回DOM节点。由于组件本质上是功能,因此测试它们涉及验证功能行为:参数如何影响返回的结果。对于React组件,这转化为设置props
并验证渲染的DOM。还需要通过编程触发来修改UI的用户交互(单击,鼠标等)。
增强测试的可读性:安排效果模式
清晰,可读的测试至关重要。这是通过简洁的措辞和一致的结构来实现的。安排效果 - 批准(AAA)模式是理想的:
- 安排:准备组件道具。
- ACT:渲染组件并触发用户交互。
- 断言:基于组件的标记验证预期结果。
例子:
它(“应该单击一个大按钮”,()=> { // 安排 props.size =“大”; // 行为 const组件=安装(send); 仿真(组件,{type:“ click”}); //断言 期望(组件,“要载”,“单击”); });
对于更简单的测试,可以组合阶段:
它(“应该用自定义文本渲染”,()=> { 期望(发送,“安装”,“要具有文本”,“ send”); });
改善当前测试实践
以前的示例虽然从概念上讲是听起来,但使用标准工具不容易实现。考虑这种更常见的方法:
(“应显示技术视图”,()=> { const容器= document.createelement(“ div”); document.body.body.appendchild(容器); act(()=> { Reactdom.render(<profilecard></profilecard> , 容器); }); const button = container.queryselector(“ button”); act(()=> { button.dispatchevent(new window.mouseevent(“ click”,{bubbles:true})); }); const详细信息= container.queryselector(“。详细信息”); 期待(lidess.classlist.contains(“ Technologies”))。tobe(true); });
将此与更抽象的版本进行比较:
(“应显示技术视图”,()=> { const组件=安装(<profilecard></profilecard> ); 仿真(组件,{type:“ click”,target:“ button”}); 期望(组件,“查询测试ID”,“详细信息”,“将类”,“ Technologies”); });
这更干净,更可读。意外J可以实现这种抽象水平。
用意外J进行测试
意外J是与各种测试框架兼容的可扩展断言库。其插件系统和语法简化了React组件测试。我们将重点介绍用法和示例,而不是深入研究Intirantjs的内部工作。
示例:配置卡组件
我们将测试一个ProfileCard
组件(省略了简短的代码,但在引用的GitHub存储库中可用)。
设置项目
要遵循,请克隆GITHUB存储库,然后按照说明设置项目并运行测试。
组件测试
测试(在src/components/ProfileCard/ProfileCard.test.js
中)使用AAA模式:
- ProP设置:设置
beforeEach
设置默认道具。
each(()=> { props = { 数据: { 名称:“贾斯汀案”, 帖子:45, CreationDate:“ 01.01.2021”, },, }; });
特定的测试用例:示例包括“在线”图标,生物文本,技术视图(有和没有数据)的测试,位置显示,回调功能执行以及使用默认道具进行渲染。每个测试案例清楚地证明了安排 - 分配模式。 (省略了详细的测试案例,但可在GitHub储备库中使用)。
运行测试:所有测试均通过
yarn test
执行。
结论
此示例展示了一种更有效的反应组件测试方法。通过将组件视为功能并采用AAA模式,您可以创建更可维护和可读的测试。测试库的选择应以其有效处理组件渲染和DOM比较的能力来指导;在这方面,意外J是强大的竞争者。探索提供的GitHub存储库,以进行完整的理解和进一步的实验。
以上是人类的反应组件测试的详细内容。更多信息请关注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
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

Dreamweaver CS6
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中