3种最好用的JavaScript单元测试工具知多少
如何对JavaScript程序代码进行单元测试?答案有很多,就如同世界上许多事情一样,总是存在诸多选择。
本篇文章重点描述几个当下比较受欢迎的JavaScript单元测试工具,也是笔者常用并且爱不释手的工具。
希望这篇文章能够帮助各位读者在启动和设置项目时节省时间,更高效地对JavaScript进行单元测试。
什么是JS中的单元测试
软件测试的经验法则是:如果我们编写的代码中有业务逻辑,那么它就需要测试。测试方法通常就是在想实现逻辑的步骤上启用断言。
所以,在大多数情况下,JavaScript单元测试与任何其他语言的单元测试没有什么不同。
对于任何具有web体验的应用程序,JavaScript将以某种方式成为该应用程序的一部分。即使整个项目的业务逻辑主要在后端,我们也不能忽略前端测试,尤其是为JavaScript代码库进行基础测试。
单元测试很大程度上确保了代码质量,同时也使重构变得更容易。
当我们用测试来验证应用程序行为时,或者编写测试以验证修复的bug时,这都会让我们很有成就感,从而也能更自信地更新代码。
JavaScript单元测试工具
Jest
Jest是一个JavaScript测试框架,它以零配置、并行测试为卖点,同时具有快照等特性,可以轻松捕获并保存大型项目的快照。
Jest由Facebook维护,最开始常常与ReactJS测试联系在一起。
Jest内置了很多特性,不仅可以适用于React,还适用于Vue、Angular、Node.js、TypeScript等项目。
Jest的诸多优点让它被戏称为:令人愉快的测试框架。
用Jest开始编写单元测试通常不需要任何配置,而且使用npm就能轻易安装:
npm install --save-dev jest
让Jest意识到测试文件的存在很简单,只需要编写一段代码,然后将它命名为“NAME.test.js”(扩展名为.test.js的文件将被Jest获取)。
Jest的API使用了单元测试中常见的语法,编写一个sum.test.js文件,比如像这样:
test('adds 1 + 2 to equal 3', () => {expect(sum(1, 2)).toBe(3);});
还有其他语法或测试术语,比如用“describe”来形成一个作用域,创造性地去使用“it”而不是“test”,就像这样的风格:
describe("an area of code", () => {it("does what I expect", () => {expect(true).toBeTruthy();});});
到目前为止,Jest是JavaScript单元测试领域的最受欢迎的一种框架,始终处于领先地位,几乎任何其他框架迁移到Jest都很容易实现,就像它可以在Jasmine中“按原样”工作,并且代码模块也可以从其他工具迁移。
Jasmine
Jest是在Jasmine的工作基础上实现的,在我们describe一个测试套件(test suite),或者使用其他语句实现逻辑过程时,Jasmine使用行为驱动开发(BDD)分类。
Jasmine提供了许多扩展包,可以在适用于各种开发环境,比如Jasmine for Ruby或Jasmine for Python,甚至还有一个浏览器内的测试运行程序。
Jasmine的独立发行版可以在浏览器中运行(通过HTML页面加载脚本、测试运行程序和测试脚本),所以如果你在JavaScript中进行单元测试,但没有npm/Node.js环境设置,Jasmine将会是一个很好的选择。
一个简单的Jasmine代码段:
describe(“My wonderful function”, function() {it(“should be very cool”, function() {expect(myfunction()).toEqual(“cool”);});});
Jasmine能被灵活运用于在各种工具和测试运行程序之间,并且测它的语法格式使它们易于阅读,当然前提是代码编得很好并富有层次!
AVA
AVA是一个Node.js和JavaScript的测试运行程序,小而快,并且有友好的输出结果,比如当测试失败时突出显示异常。
AVA的语法格式与Jest或Jasmine有些不同:
const test = require('ava');test('a is not b', t => {t.is("a", "b"); // This test will fail});
AVA称自己个性化的不同为“神奇的断言”,确实,当我们查看测试输出时,它非常有用:
其他测试工具
除了这些比较流行的选择之外,还有很多JavaScript测试框架和工具,值得一提的是tape,它强调TAP原则(TAP:Test Anything Protocol测试任何协议)。
还有DOM测试库,它不是一个测试运行程序或测试框架,但当使用各种框架(或没有框架)为web ui编写测试时,它是一个非常有用的工具。
对于单元测试之外的JavaScript测试,JavaScript中的集成测试和终端测试也十分与必要,对于这些测试,除了通常所用的Selenium以外,还有有相当多的有趣工具等着我们发现!
例如,QA Wolf能在你的APP上使用浏览器时创建Jest测试代码!
如果我们想要确保客户端的代码质量,我们需要严格地对代码进行测试和实践。
幸运的是,有许多经过反复审查的工具可用来进行JavaScript单元测试,这使我们的测试工作能够事半功倍。
最后,希望笔者举出来的这些工具能够帮助更多读者进行JavaScript单元测试。
最后也给大家分享一份软件测试资料
上面的这些内容,对于软件测试的的朋友来说应该是最全面最完整的备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。
关注我的微信公众号:程序员二黑,即可免费获取!
最困难的时候,也就是我们离成功不远的时候!如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们的群:785128166 大家一起讨论交流学习。
精彩推荐:
在职阿里6年,一个29岁女软件测试工程师的心声
公司新来的阿里p8,看了我做的APP和接口测试,甩给了我这份文档…
腾讯二面:web测试问题被虐哭了,直到学长给了我这些知识点…
3种最好用的JavaScript单元测试工具知多少相关推荐
- 测试函数JavaScript单元测试工具使用—QUnit
发一下牢骚和主题无关: 本文绝大部分来自于http://www.oncoding.cn/2010/javascript-unit-testing-qunit/,由于最新版的QUNIT更改了API接口, ...
- javascript单元测试工具- -QUnit
为什么80%的码农都做不了架构师?>>> QUnit~ 转载于:https://my.oschina.net/hcp/blog/94950
- 开源单元测试工具汇总
开源单元测试工具/框架汇总 作为开源软件的爱好者,了解了单元测试这概念后,自然忍不住去找找有什么开源单元测试工具. 下面列出了30款1,不分先后顺序. 1. NoSQL的单元测试工具 NoSQLUni ...
- Extjs单元测试工具Siesta控件介绍
Siesta概述 Siesta控件是一个JavaScript单元测试工具,可以助您测试任何Javascript代码和同样测试DOM和模拟用户交互.工具可以和任何javascript代码-jQuery, ...
- python逻辑与界面分离_一种数据与逻辑分离的Python单元测试工具
一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...
- 周边花絮.js.14种流行的基于JavaScript的数据可视化工具?
简单介绍: 俗话说,一图胜千言.图形化的信息可以让人们对数据有更加直观清晰的理解,让信息发布者更加高效地展示自己的核心内容.在前端开发中,如果缺少合适工具,制作数据可视化图表会十分复杂.然而随着数据可 ...
- 简单易操作的跨浏览器JavaScript单元测试解决方案
关于单元测试 前端的单元测试也可以称为自动化测试,测试驱动开发,单元测试对于前端模块化.框架和功能库的开发是非常有必要的,只要做好模块的解耦和功能划分,单元测试就可以愉快地进行.好的单元测试(全面的功 ...
- 从头搭建rpc框架_#LearnByDIY-如何从头开始创建JavaScript单元测试框架
从头搭建rpc框架 by Alcides Queiroz 通过Alcides Queiroz #LearnByDIY-如何从头开始创建JavaScript单元测试框架 (#LearnByDIY - H ...
- JavaScript开发工具列表
摘要:你经常使用JavaScript开发吗?你使用哪些JavaScript开发工具?本文中,总结了一些非常实用的JavaScript工具,全部是免费的.使用这些工具将直接影响你的工作效率. 在今天网络 ...
最新文章
- Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤
- latex中的各种文件
- Struts 2中#、%和$符号的相应用途
- 《P5R》的反派设计有什么可取之处?
- python的requests.session()_Python+requests之session保持会话
- Geek的入门神器:micropython-能跑python的stm32开发板
- Linux基础命令---cpio
- layui 如何去dom_javascript 怎么去引用layui里面的方法
- Tomcat6项目移到Tomcat7 提示 404 解决方案
- 深度linux 网络配置文件,solver及其配置 - Caffe 深度学习入门教程_Linux教程_Linux公社-Linux系统门户网站...
- 关于Office 中的墨迹功能(可作word电子签名)
- Python数据可视化案例三:使用Slider组件调整曲线参数
- 用matlab画出TFT,基于Matlab的TFT-LCD解码电路的仿真设计(含程序)
- Tomcat性能监控LambdaProbe
- fstream的用法-----------------2012.12.26
- ygbook小说网站源码 自动采集赚钱源码 ThinkPHP+MYSQL开发
- Transformers in NLP (一):图说transformer结构
- 如何压缩word文档的大小?
- win10桌面无限刷新
- 无法计算机您系统的体验指数,win7无法计算机您系统的windows体验指数如何解决...
热门文章
- 一些常用的GOOGLE、YAHOO、BAIDU三大搜索引擎搜索命令
- 爱奇艺技术沙龙盘点(内含资料分享)
- unity在运行时导入maya场景角色和动画的方法研究
- MindMapper中如何使用格式刷
- 新手通俗易懂的juc优质文章
- 戴尔电脑无法自动修复此计算机,戴尔win10无限自动修复重置电脑时出现问题 你做对了吗?...
- 亿格瑞x6老是显示服务器未就绪,亿格瑞新品 X6 家庭云盘详情
- layui数据表格搜索php代码,layui实现显示数据表格和搜索功能示例
- PS学习-锐化和修饰照片(三)--利用表面模糊分区降噪,获得纯净山水剪影效果
- 求IOS录屏并录声音的方案