专栏名称: 51Testing软件测试网
51Testing软件测试网,人气最旺的软件测试技术门户,提供软件测试社区交流,软件测试博客,人才服务,测试沙龙,测试杂志,测试资料下载等全方位信息服务,是国内最专业的软件测试就业培训、企业服务供应商...
目录
相关文章推荐
人力资源分享汇  ·  HR经验能力自测,来测试一下你能打多少分? ·  昨天  
51好读  ›  专栏  ›  51Testing软件测试网

JavaScript单元测试利器-Mocha+chai

51Testing软件测试网  · 公众号  · 测试  · 2017-01-19 17:30

正文



  前言段子:

  本文由应对扯淡的开发团队而出,为毛这么说?呃...你们见过把大部分业务逻辑写在前端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测试天地》原创测试文章系列(四十四)

 
推荐阅读

点击阅读☞谷歌安卓UI自动化测试策略

点击阅读☞Mocha+Chai单元测试并没有想象中难

点击阅读☞写单元测试是个技术活

点击阅读☞无接口.NET代码的单元测试

点击阅读☞写PHP代码,你搞过单元测试吗?


喜欢我们的会点赞,爱我们的会分享!