mocha框架下,异步测试代码错误造成的问题----用例超时错误
今天用抹茶(mocha)做个测试,发现有一个测试项目总是超时:
describe("DbFactory functions",function(){
it("query tables should return more than 0 rows",function(done){
this.timeout(5000);
db.execQuery("show tables").then(function(data){
//错误就是这个地方,应该是data.data。
data.rows.length.should.greaterThan(0);
done();
},function(err){
done(err);
});
});
});
上述代码执行结果如下:只是超时引起的错误。
4 passing (5s)
1 failing 1) DbFactory DbFactory functions query tables should return more than 0 rows:
Error: timeout of 5000ms exceeded
at null.<anonymous> (/var/node-v0.10.28-linux-x64/lib/node_modules/mocha/lib/runnable.js:158:19)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
经过将timeout设为更长时间也没有用,况且命令在mysql中是即时返回的,看来应该不是超时问题。
由于测试对象DbFactory中使用了q的promise对象,开始怀疑是deferer对象一直没有触发,后经过调试发现deferer对象没有问题,resolve也触发了。
经故意引起错误,发现错误处理可以很快测试完毕,没有问题!几经周折,终于发现是should测试的对象的属性搞错了,应该是data而不是rows,改正过来后,测试很快通过。
5 passing (184ms)
看起来,mocha在异步模式下没有抓住代码的错误!不知道是不是算一个bug。后发现经过在测试代码中加上try catch,可以抓到错误。
注:后来认真思考了下,确实不是mocha的问题,异步方法中的异常它没有办法抓取,也不能说是node的问题,这大概就是异步编程方式的痛吧。
describe("DbFactory functions",function(){
it("query tables should return more than 0 rows",function(done){
this.timeout(5000);
db.execQuery("show tables").then(function(data){
try{// 这里添加了捕获代码
data.rows.length.should.greaterThan(0);
done();
}catch(err){done(err);}
},function(err){
done(err);
});
});
});
代码修改后,可以抓到错误信息:
4 passing (207ms)
1 failing 1) DbFactory DbFactory functions query tables should return more than 0 rows:
TypeError: Cannot read property 'length' of undefined
at /home/gzg/nodeDev/dzfu/test/dbFactory.test.js:22:26
at _fulfilled (/home/gzg/nodeDev/dzfu/node_modules/q/q.js:794:54)
at self.promiseDispatch.done (/home/gzg/nodeDev/dzfu/node_modules/q/q.js:823:30)
at Promise.promise.promiseDispatch (/home/gzg/nodeDev/dzfu/node_modules/q/q.js:756:13)
at /home/gzg/nodeDev/dzfu/node_modules/q/q.js:564:44
at flush (/home/gzg/nodeDev/dzfu/node_modules/q/q.js:110:17)
at process._tickCallback (node.js:419:13)
mocha框架下,异步测试代码错误造成的问题----用例超时错误的更多相关文章
- Spring框架下Junit测试
Spring框架下Junit测试 一.设置 1.1 目录 设置源码目录和测试目录,这样在设置产生测试方法时,会统一放到一个目录,如果没有设置测试目录,则不会产生测试代码. 1.2 增加配置文件 Res ...
- 异步nodejs代码的同步样子写法样例
异步nodejs代码的同步样子写法样例 js的异步嵌套太深代码将不好看.尤其在用node的时候这种情况会大量出现. 这里用node连接redis,做一个用户注册的简单例子来说明.例如用redis做存储 ...
- 蛋疼的mocha库-promise异步测试
mocha 测试库的使用 错误的处理异步测试 异步当出现断言错误的时候,他会抛出错误,但不会把这次测试当作失败,就是正确的顺利通过测试了,很无语. promise的reject会在then的第二个函数 ...
- Spring MVC框架下在java代码中访问applicationContext.xml文件中配置的文件(可以用于读取配置文件内容)
<bean id="propertyConfigurer" class="com.****.framework.core.SpringPropertiesUtil& ...
- appium测试代码nullpoint
今天写了个简单向上滑动,执行到向上滑动操作,报nullpoint异常,经过各种乱碰终于解决了,现记录一下过程,以备以后参考! 环境背景:java+testng+appium 在@Test下调用 dir ...
- NodeJs下的测试框架Mocha
介绍和代码下载 Mocha在2011年发布,是目前最为流行的javascript框架之一,在本文我们重点介绍它在NodeJs上的使用. 如果你需要下载实例代码,可以通过这个链接 gitClone 或者 ...
- unittest框架扩展(基于代码驱动)自动化-下
一.数据驱动/代码驱动优缺点: 使用数据驱动的好处:- 代码复用率高.同一测试逻辑编写一次,可以被多条测试数据复用,提高了测试代码的复用率,同时可以提高测试脚本的编写效率.- 异常排查效率高.测试框架 ...
- 使用JMeter测试.Net5.0,.Net6.0框架下无数据处理的并发情况
1. 安装JMeter及使用 1.1下载JMeter 登录官方网站找到下载链接进行下载:https://jmeter.apache.org/download_jmeter.cgi 1.2配置环境变 ...
- Python Web框架Tornado的异步处理代码演示样例
1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...
随机推荐
- java中ThreadExecutor使用注意
如果使用了submit(Runnable task) 就会出现这种情况,任何的错误信息都出现不了! 这是因为使用submit(Runnable task) 的时候,错误的堆栈信息跑出来的时候会被内部捕 ...
- ARKit从入门到精通(1)-ARKit初体验
ARKit从入门到精通(1)-ARKit初体验 转载自:http://blog.csdn.net/u013263917/article/details/72903174 该系列文章共十篇,笔者将由易到 ...
- 基于jQuery+CSS3实现人物跳动特效
分享一款基于jQuery+CSS3实现人物跳动特效.这是一款类似gif图片效果的CSS3动画特效代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=& ...
- [Linux基础环境/软件]Linux下安装mysql
我是使用免安装的包mysql-5.5.28-linux2.6-x86_64.tar.gz(在http://dev.mysql.com/downloads/可以下载到最新的包)的.直接解压,然后配置,初 ...
- 从Unauthorized 401错误学习Spring Boot的Actuator
之前用Spring Boot都是别人搭好的框架,然后自己在里面写就行了.对原理.细节上都怎么涉及,毕竟需求都做不完.但是昨天一个访问RESTful接口的401问题搞了我2个小时.网上找的很多用: ma ...
- C语言 · 新生舞会
算法训练 新生舞会 时间限制:1.0s 内存限制:512.0MB 问题描述 新生舞会开始了.n名新生每人有三个属性:姓名.学号.性别.其中,姓名用长度不超过20的仅由大小写字母构成的 ...
- CycleGAN 各种变变变
转载自 简单介绍了一下GAN和DCGAN的原理.以及如何使用Tensorflow做一个简单的生成图片的demo. Ian Goodfellow对GAN一系列工作总结的ppt,确实精彩,推荐:独家 | ...
- backbone的对象继承实现
通过原型链实现对象的继承,子类通过’__super__‘来访问父类的方法 // protoProps 子类的属性参数 // staticProps 静态属性 var extend = function ...
- Hbase 学习(三)Coprocessors
Coprocessors 之前我们的filter都是在客户端定义,然后传到服务端去执行的,这个Coprocessors是在服务端定义,在客户端调用,然后在服务端执行,他有点儿想我们熟悉的存储过程,传一 ...
- 根据map键值对,生成update与select语句,单条执行语句
方法 constructUpdateSQL private static String constructUpdateSQL(String tableName, List<Map<Stri ...