如何对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单元测试工具知多少相关推荐

  1. 测试函数JavaScript单元测试工具使用—QUnit

    发一下牢骚和主题无关: 本文绝大部分来自于http://www.oncoding.cn/2010/javascript-unit-testing-qunit/,由于最新版的QUNIT更改了API接口, ...

  2. javascript单元测试工具- -QUnit

    为什么80%的码农都做不了架构师?>>>    QUnit~ 转载于:https://my.oschina.net/hcp/blog/94950

  3. 开源单元测试工具汇总

    开源单元测试工具/框架汇总 作为开源软件的爱好者,了解了单元测试这概念后,自然忍不住去找找有什么开源单元测试工具. 下面列出了30款1,不分先后顺序. 1. NoSQL的单元测试工具 NoSQLUni ...

  4. Extjs单元测试工具Siesta控件介绍

    Siesta概述 Siesta控件是一个JavaScript单元测试工具,可以助您测试任何Javascript代码和同样测试DOM和模拟用户交互.工具可以和任何javascript代码-jQuery, ...

  5. python逻辑与界面分离_一种数据与逻辑分离的Python单元测试工具

    一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...

  6. 周边花絮.js.14种流行的基于JavaScript的数据可视化工具?

    简单介绍: 俗话说,一图胜千言.图形化的信息可以让人们对数据有更加直观清晰的理解,让信息发布者更加高效地展示自己的核心内容.在前端开发中,如果缺少合适工具,制作数据可视化图表会十分复杂.然而随着数据可 ...

  7. 简单易操作的跨浏览器JavaScript单元测试解决方案

    关于单元测试 前端的单元测试也可以称为自动化测试,测试驱动开发,单元测试对于前端模块化.框架和功能库的开发是非常有必要的,只要做好模块的解耦和功能划分,单元测试就可以愉快地进行.好的单元测试(全面的功 ...

  8. 从头搭建rpc框架_#LearnByDIY-如何从头开始创建JavaScript单元测试框架

    从头搭建rpc框架 by Alcides Queiroz 通过Alcides Queiroz #LearnByDIY-如何从头开始创建JavaScript单元测试框架 (#LearnByDIY - H ...

  9. JavaScript开发工具列表

    摘要:你经常使用JavaScript开发吗?你使用哪些JavaScript开发工具?本文中,总结了一些非常实用的JavaScript工具,全部是免费的.使用这些工具将直接影响你的工作效率. 在今天网络 ...

最新文章

  1. Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤
  2. latex中的各种文件
  3. Struts 2中#、%和$符号的相应用途
  4. 《P5R》的反派设计有什么可取之处?
  5. python的requests.session()_Python+requests之session保持会话
  6. Geek的入门神器:micropython-能跑python的stm32开发板
  7. Linux基础命令---cpio
  8. layui 如何去dom_javascript 怎么去引用layui里面的方法
  9. Tomcat6项目移到Tomcat7 提示 404 解决方案
  10. 深度linux 网络配置文件,solver及其配置 - Caffe 深度学习入门教程_Linux教程_Linux公社-Linux系统门户网站...
  11. 关于Office 中的墨迹功能(可作word电子签名)
  12. Python数据可视化案例三:使用Slider组件调整曲线参数
  13. 用matlab画出TFT,基于Matlab的TFT-LCD解码电路的仿真设计(含程序)
  14. Tomcat性能监控LambdaProbe
  15. fstream的用法-----------------2012.12.26
  16. ygbook小说网站源码 自动采集赚钱源码 ThinkPHP+MYSQL开发
  17. Transformers in NLP (一):图说transformer结构
  18. 如何压缩word文档的大小?
  19. win10桌面无限刷新
  20. 无法计算机您系统的体验指数,win7无法计算机您系统的windows体验指数如何解决...

热门文章

  1. 一些常用的GOOGLE、YAHOO、BAIDU三大搜索引擎搜索命令
  2. 爱奇艺技术沙龙盘点(内含资料分享)
  3. unity在运行时导入maya场景角色和动画的方法研究
  4. MindMapper中如何使用格式刷
  5. 新手通俗易懂的juc优质文章
  6. 戴尔电脑无法自动修复此计算机,戴尔win10无限自动修复重置电脑时出现问题 你做对了吗?...
  7. 亿格瑞x6老是显示服务器未就绪,亿格瑞新品 X6 家庭云盘详情
  8. layui数据表格搜索php代码,layui实现显示数据表格和搜索功能示例
  9. PS学习-锐化和修饰照片(三)--利用表面模糊分区降噪,获得纯净山水剪影效果
  10. 求IOS录屏并录声音的方案