前言

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

  1. expect用法

    1. [#!/usr/bin/expect]  这一行告诉操作系统脚本里的代码使用那一个shell来执行.这里的expect其实和linux下的bash.windows下的cmd是一类东西.  注意: ...

  2. expect基本使用方法

    参考: http://www.cnblogs.com/lzrabbit/p/4298794.html expect是linux系统中可以和子进程进行交互的一个命令,使用它可以做一些自动化工作.pyth ...

  3. 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序

    物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...

  4. expect实现自动登录

    自动登录主机(ssh) 建脚本item2login.sh,包含如下内容 #!/usr/bin/expect set timeout 30 spawn ssh -p [lindex $argv 0] [ ...

  5. 自动化运维 Expect

      Mac 下载:brew install homebrew/dupes/expect expect : ->  自动化脚本工具:  用于处理交互命令; #注意 调用时并不是使用的 /bin/b ...

  6. expect

    #!/usr/bin/expect -fset ipaddr "192.168.5.4"set passwd "123qwe"set timeout 30 sp ...

  7. expect命令问题1

    [root@localhost scripts]# cat exptest.sh #!/usr/bin/expect spawn ssh root@127.0.0.1 expect "pas ...

  8. expect脚本语言用法示例

    #!/usr/bin/expect set hostname [lindex $argv 0] set username [lindex $argv 1] set passwd [lindex $ar ...

  9. 测试框架Mocha与断言expect

    测试框架Mocha与断言expect在浏览器和Node环境都可以使用除了Mocha以外,类似的测试框架还有Jasmine.Karma.Tape等,也很值得学习. 整个项目源代码: 为什么学习测试代码? ...

随机推荐

  1. 表单form action的url写法

    在写web页面时,标签 是很常见的元素,它的一个属性是action,用来标识将表单交给谁去处理.很显然,这里有一个地址的问题,而且是在服务器这边的地址.比如服务器内的一个servlet.   那么这个 ...

  2. eclipse中文乱码问题解决方案

    eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...

  3. pthread 学习系列 case2-- 使用互斥锁

    ref http://www.ibm.com/developerworks/cn/linux/thread/posix_thread1/index.html #include <pthread. ...

  4. .htaccess文件详解

    启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用 笼统地来说,.htaccess可以帮我们实现包括:文件夹密码 ...

  5. linux 搭建nginx环境(centos6.5)

    1.rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rp ...

  6. jetty使用教程(嵌入eclipse开发)

    在eclipse下面建一个java project 建立目录结构如下: 二级目录: (备注jetty_test是工程的根目录,etc.lib.webRoot为其二级目录) 到jetty的官方网站(ht ...

  7. WiFi入口流量O2O微应用平台

    WiFi入口流量O2O微应用平台 随着智能手机一年比一年销量大好,传统的互联网的流量争夺战场已经转向了移动互联网,各大巨头纷纷出招,智能wifi路由器就是其中最重要的一块战略高地.所谓的智能路由器,解 ...

  8. 【福利将至】iPhone用户可用Siri发微信了

    北京时间6月14日,苹果WWDC16开发者大会召开.继2015年3月份春季发布会和9月份的秋季新品发布会,苹果和腾讯联手Apple Watch版微信和微信3DTouch功能之后,双方在今年的WWDC上 ...

  9. 织梦channelid是什么?dede channel typeid有什么区别

    昨儿帮小伙伴整dedecms首页调用栏目文章,当时没注意用到的是channelid参数,修改了好多次赋值,新建了一个新的栏目获取id是156,添加栏目文章,把channelid改为156重新生成首页, ...

  10. Xcode 4.6.3 Bug - .m 文件不能正常打开,uitableveiwController

    当打开.m文件时尤其是自定义的继承uitableviewcontroler的m 文件.不能滑动,不能正常显示. 解决方法: 用文本编辑器打开这个文件,关闭xcode .然后在继承uitableview ...