前言

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的更多相关文章

  1. 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.一种 ...

  2. 【Mocha.js 101】Mocha 入门指南

    序 说到质量控制,不得不提起测试驱动开发(TDD)和行为驱动开发(BDD).随着敏捷软件开发的推行,软件质量控制的重担也逐渐从测试工程师转向了研发工程师.测试驱动也随之悄然而生,成为了敏捷开发中重要的 ...

  3. 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)

    了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编   赵静 译 ISBN 978-7-121-21769-2 2 ...

  4. Yeoman自动构建js项目

    Aug 19, 2013 Tags: bowergruntJavascriptjsnodejsyeomanyo Comments: 10 Comments Yeoman自动构建js项目 从零开始nod ...

  5. 好玩儿的expect

    前言 1> 借鉴里面的应用思想,使用断言提高代码的健壮性及维护性 2> 实现方式——不采用直接嵌入expect的方式,统一进行重写(提取常用断言方法,重新构造API) 官网介绍 https ...

  6. javascript功能插件大集合 前端常用插件 js常用插件

    转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具.•npm – npm 是 javascript 的包管 ...

  7. javascript单元测试框架mochajs详解

    关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...

  8. JavaScript资源大全中文版(Awesome最新版)

    Awesome系列的JavaScript资源整理.awesome-javascript是sorrycc发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架.运行器.QA.MVC框架和库.模 ...

  9. JavaScript资源大全中文版(Awesome最新版--转载自张果老师博客)

    JavaScript资源大全中文版(Awesome最新版)   目录 前端MVC 框架和库 包管理器 加载器 打包工具 测试框架 框架 断言 覆盖率 运行器 QA 工具 基于 Node 的 CMS 框 ...

随机推荐

  1. Maven的作用及简介

    Maven的作用及简介 一.maven作用 项目之间都是有依赖的,比如A项目依赖于B项目,B项目依赖与C.D项目,等等.这样的依赖链可能很长. 但是,没有一个项目的jar包我们都要导入进去,我们要做的 ...

  2. 密码学笔记(5)——Rabin密码体制和语义安全性

    一.Rabin密码体制 Rabin密码体制是RSA密码体制的一种,假定模数$n=pq$不能被分解,该类体制对于选择明文攻击是计算安全的.因此,Rabin密码体制提供了一个可证明安全的密码体制的例子:假 ...

  3. Linux CentOS CapsLock 大小写反转问题 解决

    虚拟机centos7,输入大小写字母反了,开启capslock的时候变成小写字母了,关闭则变成大写了... 只需要执行 setleds +caps 或 setleds -caps 即可,如图:

  4. 06_jQuery对象初识(四)文档处理

    1. 案例:在ul中添加li标签. append在最后添加 prepend在最前面添加 <ul id="ul"> <li>1</li> < ...

  5. mac下解压bin文件

    在mac下要解压Android-ndk-r10e-darwin-x86_64.bin文件. 1.进入文件所在目录,修改文件的读取权限 chmod a+x android-ndk-r10e-darwin ...

  6. ch5 vlsms

    Variabel Length Subnet Mask vlsms 较早的路由协议 ripv1 没有为子网准备的字段,子网信息会被丢失. 这意味着如果一个路由器运行着一个rip协议具有一个确定的子网掩 ...

  7. 2019-5-21-C#-在-构造函数添加-CallerMemberName-会怎样

    title author date CreateTime categories C# 在 构造函数添加 CallerMemberName 会怎样 lindexi 2019-05-21 11:28:32 ...

  8. 利用animate.css和es6制作文字向上滚动的效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...

  9. C语言复制数组

    直接上代码,分别是栈上开辟内存,堆上开辟内存 #include <stdio.h> #include <stdlib.h> void test01(){ ]; printf(& ...

  10. (视频分辨率介绍)混淆的概念:SIF与CIF、4CIF与D1

    http://www.microjie.com/index.php/professional-knowledge/82-standards-parterns/26-profession-knowled ...