前言

什么是自动化测试

  • 自动化测试在很多团队中都是Devops环节中很难执行起来的一个环节,主要原因在于测试代码的编写工作很难抽象,99%的场景都需要和业务强绑定,而且写测试代码的编写工作量往往比编写实际业务代码的工作量更多。在一些很多业务场景中投入产出比很低,适合写自动化测试的应该是那些中长期业务以及一些诸如组件一样的基础库。自动化测试是个比较大的概念,其中分类也比较多,比如单元测试,端对端测试,集成测试等等,其中单元测试相对而言是我们比较耳熟能详的一个领域。单元测试框架有很多,比如Mocha,Jest,AVA等。Mocha是我们今天文章的重点,我们先来了解下mocha是怎样的一款框架。

什么是Mocha

  • Mocha是一款运行在nodejs上的测试框架,相信大家或多或少都有听过或是见过,支持同步和异步测试,同时还支持TDD,BDD等多种测试风格,mocha作为一款老牌的测试框架已经被广泛应用在单元测试或是端对端测试的场景中。mocha的源码十分的冗长,而且包含了很多的高级玩法,但实际上mocha的核心原理是十分简单的,导致源码体积庞杂的原因主要在于实现了很多其他的功能,做了很多代码上的兼容处理。比如生成html格式的测试报告这种,支持多种的测试风格,插件系统等等。但实际在业务中我们对mocha本身90%的场景的使用也仅仅是他的“测试”功能而已。诸如多种文本格式的测试覆盖率报告的生成,断言库,测试数据mock等等其它功能都可以使用做的更好一些第三方库来代替。mocha本身是个比较纯粹的测试框架。

准备

了解mocha

  • 综上所述,撇弃mocha其它的复杂实现,针对于它的核心原理的解读是本次分享的主题。源码阅读十分枯燥,我们将根据目前现有的mocha核心功能实现一个简易的mocha。在此之前我们先认识下如何使用mocha,下面是一段来自lodash判断数据类型的代码:

// mocha-demo/index.js
const toString = Object.prototype.toString;function getTag(value) {if (value == null) {return value === undefined ? '[object Undefined]' : '[object Null]'}return toString.call(value)
}module.exports = {getTag,
};

上述代码使用了Object.prototype.toString来判断了数据类型,我们针对上述代码的测试用例(此处断言使用node原生的assert方法,采用BDD的测试风格):

// test/getTag.spec.js
const assert = require('assert');
const { getTag } = require('../index');describe('检查:getTag函数执行', function () {before(function() {console.log('												

深入理解 Mocha 测试框架:从零实现一个 Mocha相关推荐

  1. Noejs Mocha测试框架

    ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(不应当急于求成,应当去熟悉自己的研究对象,锲而不舍,时间会成全一切.凡事开始最难,然而更难的是何以善终.--莎士比亚) ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤ ...

  2. 【Web技术】1437- 从零实现一个 Mocha

    大厂技术  坚持周更  精选好文 本文为来自飞书 aPaaS Growth 研发团队成员的文章. aPaaS Growth 团队专注在用户可感知的.宏观的 aPaaS 应用的搭建流程,及租户.应用治理 ...

  3. Truffle测试框架

    Truffle测试框架 Truffle 有一个标准的自动化测试框架,让你可以非常方便地测试您的合约.这个框架允许您以两种不同的方式编写简单可控的测试: 1. 在JavaScript中, 用于执行来自外 ...

  4. karma 测试框架的前世今生

    引言 在前端测试框架的学习中了解到了karma的强大,搜索得到淘宝前端团队的这片讲述karma特点及原理的分享,非常不错.转载分享至此, 原文链接:http://taobaofed.org/blog/ ...

  5. testem方便的web tdd 测试框架使用

    备注: 单元测试,对于日常的开发是比较重要的,testem 简化了我们的代码编写,以及运行. 主要特性: a. 支持的测试框架有:jasmine quint mocha buster.js ,同时也包 ...

  6. Redis源码分析之小型测试框架testhelp.h和redis-check-aof.c日志检测

    使用的是redis 3.2版本 test中的文件主要分为以下几个: 1.memtest.c 内存检测 2.redis_benchmark.c 用于redis性能测试的实现,后续会当做单独的一个章节进行 ...

  7. Protractor AngularJS测试框架教程

    Protractor是一个建立在WebDriverJS基础上的端到端(E2E)的AngularJS JavaScript Web应用程序测试框架.Protractor全自动化真实的模拟用户在真正的浏览 ...

  8. 顶级测试框架Jest指南:跑通一个完美的程序,就是教出一群像样的学生

    facebook三大项目:yarn jest metro,有横扫宇宙之势. 而jest项目的宗旨为:减少测试一个项目所花费的时间成本和认知成本. --其实,它在让你当一个好老师. jest文档非常简略 ...

  9. React测试框架之enzyme

    简介 Enzyme是由Airbnb开源的一个React的JavaScript测试工具,使React组件的输出更加容易extrapolate .Enzyme的API和jQuery操作DOM一样灵活易用, ...

  10. metasploit 一款开源的渗透测试框架

    渗透神器漏洞利用框架metasploit from: https://zhuanlan.zhihu.com/p/30743401 metasploit是一款开源的渗透测试框架软件也是一个逐步发展与成熟 ...

最新文章

  1. 语言auc_Phoenix建模语言(PML)中AUC的计算方法
  2. 算法2:判断两个字符串内容是否相同
  3. linux 替换文件中的内容/查找、替换、全部替换
  4. PyTorch学习问题记录
  5. c++日志文件中文显示乱码的问题及解决办法
  6. Web Deploy发布网站及常见问题解决方法(图文)
  7. Java Servlet的前100个问题
  8. 关于XtraGrid的CustomUnboundColumnData事件的触发条件
  9. [iOS]深度遍历view的subview
  10. Android 自定义组件学习 3
  11. vue项目中moment的使用(时间戳格式化)
  12. 如何解决chm类型的文件在Windows操作系统中无法打开
  13. 【学习笔记】dubbo 控制台的部署
  14. 数字证书、CA、CA证书,傻傻分不清楚?这一篇看懂
  15. Jetpack Compose 动画开发实践:微博长按点赞彩虹
  16. python 创建高维数组列表
  17. 破解数字化转型难题,华为云一站式大数据BI赋能企业发展
  18. 企业微信如何设置通讯录权限?
  19. Save More Mice (贪心 二分)
  20. 单片机c语言基础知识,c语言必背100代码有哪些?

热门文章

  1. 海外服务器租用主要要看三个方面
  2. torch.nn.Linear实现单层回归网络的正向传播
  3. java实现pdf文件的电子签字+盖章+二维码+水印+PDF文件加密的解决方案
  4. 怎样测试企业级SSD
  5. zz红外焦平面阵列用信号处理电路
  6. 如何去除实验数据中的毛刺
  7. 得力计算机怎么用二进制,如何将得力计算器 DL-1529 调到保留两位小数点?
  8. 亲自动手写爬虫系列三、爬取队列
  9. 机器学习笔记(三)——归一化、KD树、数值型特征无量纲化、数值型特征分箱等
  10. 邮件客户端如何配置阿里云企业邮箱