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 框 ...
随机推荐
- Maven的作用及简介
Maven的作用及简介 一.maven作用 项目之间都是有依赖的,比如A项目依赖于B项目,B项目依赖与C.D项目,等等.这样的依赖链可能很长. 但是,没有一个项目的jar包我们都要导入进去,我们要做的 ...
- 密码学笔记(5)——Rabin密码体制和语义安全性
一.Rabin密码体制 Rabin密码体制是RSA密码体制的一种,假定模数$n=pq$不能被分解,该类体制对于选择明文攻击是计算安全的.因此,Rabin密码体制提供了一个可证明安全的密码体制的例子:假 ...
- Linux CentOS CapsLock 大小写反转问题 解决
虚拟机centos7,输入大小写字母反了,开启capslock的时候变成小写字母了,关闭则变成大写了... 只需要执行 setleds +caps 或 setleds -caps 即可,如图:
- 06_jQuery对象初识(四)文档处理
1. 案例:在ul中添加li标签. append在最后添加 prepend在最前面添加 <ul id="ul"> <li>1</li> < ...
- mac下解压bin文件
在mac下要解压Android-ndk-r10e-darwin-x86_64.bin文件. 1.进入文件所在目录,修改文件的读取权限 chmod a+x android-ndk-r10e-darwin ...
- ch5 vlsms
Variabel Length Subnet Mask vlsms 较早的路由协议 ripv1 没有为子网准备的字段,子网信息会被丢失. 这意味着如果一个路由器运行着一个rip协议具有一个确定的子网掩 ...
- 2019-5-21-C#-在-构造函数添加-CallerMemberName-会怎样
title author date CreateTime categories C# 在 构造函数添加 CallerMemberName 会怎样 lindexi 2019-05-21 11:28:32 ...
- 利用animate.css和es6制作文字向上滚动的效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...
- C语言复制数组
直接上代码,分别是栈上开辟内存,堆上开辟内存 #include <stdio.h> #include <stdlib.h> void test01(){ ]; printf(& ...
- (视频分辨率介绍)混淆的概念:SIF与CIF、4CIF与D1
http://www.microjie.com/index.php/professional-knowledge/82-standards-parterns/26-profession-knowled ...