JavaScript单元测试利器-Mocha+chai

发表于:2017-1-19 09:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:姜林斌    来源:51Testing软件测试网原创

  前言段子:
  本文由应对扯淡的开发团队而出,为毛这么说?呃...你们见过把大部分业务逻辑写在前端JS里的么?哥们不但遇到了,而且深受其害...原本可以抓包走javascript:;" onClick="javascript:tagshow(event, '%BD%D3%BF%DA%B2%E2%CA%D4');" target="_self">接口测试的那套东东全废了,不得不进行JS的单元测试 然鹅,首先需要读懂开发那边shit一样的JS代码。
  先来个科普梗:
  问:"JavaScript和Java什么关系?"
  文艺点儿的答法是:"雷锋和雷峰塔的关系"
  最直白的答法是:"卡巴斯基和巴基斯坦的关系"(不懂的话,请自行去某度)。
  看明白了JS的shit坨坨还不行,我们得找到好的框架来支持我们后续的工作,几经对比,最终选择Mocha框架和chai断言库一级Istanbul(覆盖率统计)库来进行实施。
  好啦~闲言碎语不多讲,今天咱们来表一表Mocha(发音"摩卡")摩大郎  开撸!!!
  一、Mocha介绍:
  mocha是一款功能丰富的javascript单元测试框架,它既可以运行在nodejs环境中,也可以运行在浏览器环境中。
  javascript是一门单线程语言,最显著的特点就是有很多异步执行。同步代码的测试比较简单,直接判断函数的返回值是否符合预期就行了,而异步的函数,就需要测试框架支持回调、promise或其他的方式来判断测试结果的正确性了。mocha可以良好的支持javascript异步的单元测试。
  mocha会串行地执行我们编写的测试用例,可以在将未捕获异常指向对应用例的同时,保证输出灵活准确的测试结果报告。
  Chai是一个针对Node.js和浏览器的行为驱动测试和测试驱动测试的断言库,可与任何 JavaScript测试框架集成。
  Istanbul是一个 JavaScript 的代码覆盖率检查库。其有如下特性:
  · 可检查包括语句、分支和函数覆盖,以及反向工程的代码行覆盖
  · 模块加载钩子可随时跟踪代码
  · 命令行工具可运行带覆盖率检查的 node 单元测试,不需要对测试运行进行协作
  · 可生成 HTML和LCOV报表
  · 可作为中间件使用,在浏览器进行测试
  · 可在命令行中以库的形式使用
  二、实施细则:
  1、JavaScript知识
  PS:不入虎穴焉得虎子,先自己搞定JS基础知识再谈其他的)
  1.1、JavaScript的变量
  JS中变量的命名规则:
  1)由字母、数字、下划线组成,区分大小写
  2)必须以字母开头
  3)变量名不能有空格,且大小写敏感
  4)不能使用JavaScript中的关键字做变量名
  变量声明:
  在JavaScript中,用Var命令做声明变量,当然变量也可以不作声明,而在使用时再根据数据的类型来确其变量的类型;
  length=16;//Number
  varstring_name="Johnson";//String
  vardatalist=["Audi","Fox","Lecsax"];//Array
  varperson={firstName:"John",lastName:"Doe"};//Object
   ... ...
   查看全文内容,请点击下载:http://www.51testing.com/html/15/n-3715215.html
  二、实施细则:
  1、JavaScript知识
  PS:不入虎穴焉得虎子,先自己搞定JS基础知识再谈其他的)
  1.1、JavaScript的变量
  JS中变量的命名规则:
  1)由字母、数字、下划线组成,区分大小写
  2)必须以字母开头
  3)变量名不能有空格,且大小写敏感
  4)不能使用JavaScript中的关键字做变量名
  变量声明:
  在JavaScript中,用Var命令做声明变量,当然变量也可以不作声明,而在使用时再根据数据的类型来确其变量的类型;
  length=16;//Number
  varstring_name="Johnson";//String
  vardatalist=["Audi","Fox","Lecsax"];//Array
  varperson={firstName:"John",lastName:"Doe"};//Object
  JS的变量类型分为值类型和引用类型:
  · 值类型变量的特点是:
  1)占用空间固定,保存在栈中。
  2)保存与赋值的是值本身。
  3)使用typeof检测数据的类型。
  4)基本类型数据是值类型。
  · 引用类型的变量特点是:
  1)占用空间不固定,保存在堆中。
  2)保存和赋值的是指向对象的一个指针。
  3)使用instanceof检测数据的类型。
  4)使用new()方法构造出的对象是引用型。
  变量的作用域和生命周期:
  全局变量(分为函数外定义的变量和在函数内定义的无var声明的变量)可以在任何位置调用。
  局部变量(分为在函数内使用var声明的变量和函数的参数变量)只能在当前函数体内调用。
  JavaScript变量生命周期在它声明时初始化。
  局部变量在函数执行完毕后销毁。
  全局变量在页面关闭后销毁,即:除非被显式销毁,否则一直存在。
  1.2、JavaScript数据类型
  · Undefined:
  使用var声明变量但是未进行初始化,对未初始化的变量及未声明的变量使用typeof运算符均会返回undefined;undefined的变量和null用"=="进行比较时会返回true,因为undefined派生自null。声明空对象时我们可以将其初始化为null。
  · Null:
  null表示一个空对象的指针,使用typeof检查null时会返回object。
  · Boolean:
  true为真,false为假。我们使用boolen()对各种数据类型的变量进行强制转换时的规则如下:
  非空字符串,非零数值,非空对象进行boolen()转换时返回true。
  空字符串,0及NaN,null及undefined进行boolen()转换时返回false。
   ... ...
   查看全文内容,请点击下载http://www.51testing.com/html/15/n-3715215.html
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号