好玩儿的expect
前言
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类,加入常用断言方法)。在产品部署阶段,过滤断言语句,以提高执行性能。
好玩儿的expect的更多相关文章
- expect用法
1. [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行.这里的expect其实和linux下的bash.windows下的cmd是一类东西. 注意: ...
- expect基本使用方法
参考: http://www.cnblogs.com/lzrabbit/p/4298794.html expect是linux系统中可以和子进程进行交互的一个命令,使用它可以做一些自动化工作.pyth ...
- 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序
物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...
- expect实现自动登录
自动登录主机(ssh) 建脚本item2login.sh,包含如下内容 #!/usr/bin/expect set timeout 30 spawn ssh -p [lindex $argv 0] [ ...
- 自动化运维 Expect
Mac 下载:brew install homebrew/dupes/expect expect : -> 自动化脚本工具: 用于处理交互命令; #注意 调用时并不是使用的 /bin/b ...
- expect
#!/usr/bin/expect -fset ipaddr "192.168.5.4"set passwd "123qwe"set timeout 30 sp ...
- expect命令问题1
[root@localhost scripts]# cat exptest.sh #!/usr/bin/expect spawn ssh root@127.0.0.1 expect "pas ...
- expect脚本语言用法示例
#!/usr/bin/expect set hostname [lindex $argv 0] set username [lindex $argv 1] set passwd [lindex $ar ...
- 测试框架Mocha与断言expect
测试框架Mocha与断言expect在浏览器和Node环境都可以使用除了Mocha以外,类似的测试框架还有Jasmine.Karma.Tape等,也很值得学习. 整个项目源代码: 为什么学习测试代码? ...
随机推荐
- Linux Communication Mechanism Summarize
目录 . Linux通信机制分类简介 . 控制机制 0x1: 竞态条件 0x2: 临界区 . Inter-Process Communication (IPC) mechanisms: 进程间通信机制 ...
- java连接mysql(一)
import java.sql.*; public class MysqlTest { public static void main(String[] args) throws SQLExcepti ...
- groovy-集合
Lists 你能使用下面的方法创建一个lists,注意[]是一个空list. 1 def list = [5, 6, 7, 8] 2 assert list.get(2) == 7 3 assert ...
- 编译java文件,出错:Failed to establish a connection with the target VM
helloword程序,所有java学习人员人生第一个程序,哎妈,基础太差,出错 public class Helloword{ public Helloword() { public static ...
- LINUX下为ORACLE数据库设置大页--hugepage
在Linux中配置hugepage可以提高oracle的性能,减少oracle sga的页交换,类似于aix中的lagepage. 为什么 使用大页? LINUX内存的默认块大小是4K如果SGA为:1 ...
- easyui form 方式提交数据
http://ldzyz007.iteye.com/blog/2067540 <form id="ff" method="post"> . ...
- jQuery EasyUI datagrid实现本地分页的方法
http://www.codeweblog.com/jquery-easyui-datagrid%e5%ae%9e%e7%8e%b0%e6%9c%ac%e5%9c%b0%e5%88%86%e9%a1% ...
- App接口中json方式封装通信接口
封装json通信接口的类 <?php class Response{ /** * 按json方式输出通信数据 * @param integer $code状态码 * @param string ...
- Linux之入侵痕迹清理总结
rm -f -r /var/log/*rm .bash_historyrm recently_used
- MySQL导出数据库
MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd D:\Program\MySQL\MySQL Server 5.0 ...