expect.js
前言
1> 借鉴里面的应用思想,使用断言提高代码的健壮性及维护性
2> 实现方式——不采用直接嵌入expect的方式,统一进行重写(提取常用断言方法,重新构造API)
官网介绍
https://github.com/LearnBoost/expect.js
在这里,主要是熟悉里面的API即可.列举一下常用的几项——
1> 布尔(ok)
var bFlag = true;
// 判断布尔类型
expect(bFlag).to.be.ok(); // 通过
2> 全等(be/equal)
expect(NaN).not.to.equal(NaN); // 通过
expect(NaN).not.to.be(NaN); // 通过
3> 非全等(eql)
expect(1).to.eql('1'); // 通过
// 比较对象内容
expect({ a: 'b' }).to.eql({ a: 'b' }); // 通过
4> 类型
// typeof with optional `array`
expect(5).to.be.a('number');
expect([]).to.be.an('array'); // works
expect([]).to.be.an('object'); // works too, since it uses `typeof`
// constructors
expect(5).to.be.a(Number);
expect([]).to.be.an(Array);
expect(tobi).to.be.a(Ferret);
expect(person).to.be.a(Mammal);
5> 长度(length)
expect([]).to.have.length(0);
expect([1,2,3]).to.have.length(3);
6> 空
expect({ my: 'object' }).to.not.be.empty();
expect([1,2,3]).to.not.be.empty();
7> 属性
expect({a: 'b'}).to.have.property('a');
expect({ a: 'b' }).to.have.key('a');
expect({ a: 'b', c: 'd' }).to.only.have.keys(['a', 'c']);
应用场合
expect主要是为前端js实现断言。是防御性编程(请参考里面的assert断言)内容的一部分。
主要的表现形式注入到函数(或者组件)的参数的极限值的判断及处理。
例如,以下下载组件暴露的download接口,需要对传入的opts参数做判断——
var download = function(opts) {
var list = opts.list;
// 接收的参数必须是一个数组
expect(list).to.be.an('array');
var file = list[0];
// file不能为空
expect(file).to.not.empty();
// 接收的file对象必须具有属性size且为数字
expect(file).to.have.property('size');
expect(file.size).to.be.a('number');
// 接收的file对象必须具有属性size且为数字
expect(file).to.have.property('isdir');
expect(file.isdir).to.be.a('number');
// 单文件下载
// 即:数组只有一个对象
if (list.length === 1) {
// 直接单文件下载方式
if ((file.isdir === 0) {
this._downloadOneFileDlink(file);
} else if (file.isdir === 1) {
// 文件夹
this._downloadPackage(list);
}
return;
}
// 打包下载
this._downloadPackage(list);
return;
}
主要优势
相比于注释及日志记录的方式,expect(断言)的使用有以下两点优势——
异常抛出——能够实时定位问题,助于加速定位问题
代码简洁易懂——能够清晰明白接口调用需要的参数类型及范围等,利于代码维护及继承
实现方案
开发阶段,可直接使用该库,使用expect类进行断言处理。
或对其中核心方法重新构造以实现对应核心应用即可(构造Assert类,加入常用断言方法)。在产品部署阶段,过滤断言语句,以提高执行性能。
本文转载自:https://www.cnblogs.com/jinguangguo/p/4058385.html
expect.js的更多相关文章
- Practical Node.js (2018版) 第3章:测试/Mocha.js, Chai.js, Expect.js
TDD and BDD for Node.js with Mocha TDD测试驱动开发.自动测试代码. BDD: behavior-driven development行为驱动开发,基于TDD.一种 ...
- 【Mocha.js 101】Mocha 入门指南
序 说到质量控制,不得不提起测试驱动开发(TDD)和行为驱动开发(BDD).随着敏捷软件开发的推行,软件质量控制的重担也逐渐从测试工程师转向了研发工程师.测试驱动也随之悄然而生,成为了敏捷开发中重要的 ...
- 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)
了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编 赵静 译 ISBN 978-7-121-21769-2 2 ...
- Yeoman自动构建js项目
Aug 19, 2013 Tags: bowergruntJavascriptjsnodejsyeomanyo Comments: 10 Comments Yeoman自动构建js项目 从零开始nod ...
- 好玩儿的expect
前言 1> 借鉴里面的应用思想,使用断言提高代码的健壮性及维护性 2> 实现方式——不采用直接嵌入expect的方式,统一进行重写(提取常用断言方法,重新构造API) 官网介绍 https ...
- javascript功能插件大集合 前端常用插件 js常用插件
转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具.•npm – npm 是 javascript 的包管 ...
- javascript单元测试框架mochajs详解
关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...
- JavaScript资源大全中文版(Awesome最新版)
Awesome系列的JavaScript资源整理.awesome-javascript是sorrycc发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架.运行器.QA.MVC框架和库.模 ...
- JavaScript资源大全中文版(Awesome最新版--转载自张果老师博客)
JavaScript资源大全中文版(Awesome最新版) 目录 前端MVC 框架和库 包管理器 加载器 打包工具 测试框架 框架 断言 覆盖率 运行器 QA 工具 基于 Node 的 CMS 框 ...
随机推荐
- linux ssh密钥认证, 免密码登陆
1. 客户端生成密钥 # mkdir ~/.ssh # chmod ~/.ssh # cd ~/.ssh 生成RSA密钥 # ssh-keygen -t rsa (然后连续三次回车) 2. 把公钥传到 ...
- JDK源码阅读--StringBuilder
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, Char ...
- BufferedReader用法
BufferedReader由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的 ...
- HtmlHelper2
一.隐式从ViewBag取数据 1.action中的代码: ViewBag.UserName = "admin"; cshtml中的代码: @Html.TextBox(" ...
- 使用Log4net把日志写入到SqlServer数据库
1.官网URL: http://logging.apache.org/log4net/ 2.配置文件参照URL: http://logging.apache.org/log4net/release/c ...
- PKUOJ 区间内的真素数
http://bailian.openjudge.cn/tm2018/A/ #include <iostream> #include <math.h> #include < ...
- JavaWEB过滤器和监听器技术
过滤器介绍 什么是过滤器 生活中的例子: 滤水器,口罩,杯子上滤网,渔网 生活中的过滤器:留下我们想要的,排除,我们不想要的. 高考: 只有分数够高的同学才能进入理想的大学.有一部分同学被拦截在大学之 ...
- Leetcode322. Coin Change零钱兑换
给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: coins = ...
- js实现事件委托
事件委托的概念: 事件委托就是利用事件冒泡,把事件加到父元素或祖先元素上,触发执行效果. 事件委托的写法: btn6.onclick = function(event){ event = event ...
- Django项目:CRM(客户关系管理系统)--77--67PerfectCRM实现CRM课程出勤排名
# classtop_urls.py # ————————64PerfectCRM实现CRM课程排名详情———————— from django.conf.urls import url from b ...