前言段子:
本文由应对扯淡的开发团队而出,为毛这么说?呃...你们见过把大部分业务逻辑写在前端JS里的么?哥们不但遇到了,而且深受其害...原本可以抓包走接口测试的那套东东全废了,不得不进行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
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。
String:
单引号和双引号不能交叉使用;使用.length属性访问字符串长度;字符串一旦被创建,其值不能改变,若想改变必须销毁原有字符串。
String中常见的转义:\n换行;\t制表符;\b空格;\r回车符;\f分页符;\\斜杠\。
强制类型转换为string的函数有两种,分别是toString()和String()。
其中number,boolean,string,object以及number类型的数值基数使用toString()进行转换。
Null,undefined使用String()函数进行强制类型转换的操作。
Number:
NaN的含义:notaNumber或者非数值。任何涉及NaN的操作都将返回NaN;NaN与任何数值都不相等包括其自身。
Object:
Object是一组数据或功能的集合。
1.3、JavaScript中的运算符
.......
本文出自《51测试天地》原创测试文章系列(四十四)