今天用抹茶(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框架下,异步测试代码错误造成的问题----用例超时错误的更多相关文章

  1. Spring框架下Junit测试

    Spring框架下Junit测试 一.设置 1.1 目录 设置源码目录和测试目录,这样在设置产生测试方法时,会统一放到一个目录,如果没有设置测试目录,则不会产生测试代码. 1.2 增加配置文件 Res ...

  2. 异步nodejs代码的同步样子写法样例

    异步nodejs代码的同步样子写法样例 js的异步嵌套太深代码将不好看.尤其在用node的时候这种情况会大量出现. 这里用node连接redis,做一个用户注册的简单例子来说明.例如用redis做存储 ...

  3. 蛋疼的mocha库-promise异步测试

    mocha 测试库的使用 错误的处理异步测试 异步当出现断言错误的时候,他会抛出错误,但不会把这次测试当作失败,就是正确的顺利通过测试了,很无语. promise的reject会在then的第二个函数 ...

  4. Spring MVC框架下在java代码中访问applicationContext.xml文件中配置的文件(可以用于读取配置文件内容)

    <bean id="propertyConfigurer" class="com.****.framework.core.SpringPropertiesUtil& ...

  5. appium测试代码nullpoint

    今天写了个简单向上滑动,执行到向上滑动操作,报nullpoint异常,经过各种乱碰终于解决了,现记录一下过程,以备以后参考! 环境背景:java+testng+appium 在@Test下调用 dir ...

  6. NodeJs下的测试框架Mocha

    介绍和代码下载 Mocha在2011年发布,是目前最为流行的javascript框架之一,在本文我们重点介绍它在NodeJs上的使用. 如果你需要下载实例代码,可以通过这个链接 gitClone 或者 ...

  7. unittest框架扩展(基于代码驱动)自动化-下

    一.数据驱动/代码驱动优缺点: 使用数据驱动的好处:- 代码复用率高.同一测试逻辑编写一次,可以被多条测试数据复用,提高了测试代码的复用率,同时可以提高测试脚本的编写效率.- 异常排查效率高.测试框架 ...

  8. 使用JMeter测试.Net5.0,.Net6.0框架下无数据处理的并发情况

    1.   安装JMeter及使用 1.1下载JMeter 登录官方网站找到下载链接进行下载:https://jmeter.apache.org/download_jmeter.cgi 1.2配置环境变 ...

  9. Python Web框架Tornado的异步处理代码演示样例

    1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...

随机推荐

  1. Spring事务管理要点总结

    # Spring事务管理要点总结 ### 要点---- 事务是企业级应用中必不可缺少的技术,用来确保数据的完整性和一致性.- Spring事务管理并不实现事务管理的实现,而是借助Hibernate\J ...

  2. C#学习笔记(13)——传统方法读取XML

    说明(2017-7-12 16:32:47): 1. LINQ的方法虽然很简单,但是有点不好理解,sql的写法总感觉很诡异,而且LINQ的本质也是用的传统方法,所以还是采用老办法吧! 2. 注释里的代 ...

  3. SpringBoot使用AutoConfiguration自定义Starter

    https://segmentfault.com/a/1190000011433487

  4. JVM——代空间的划分

    首先看在JVM的堆中,按代的划分: Young:主要是用来存放新生的对象. Old:主要存放应用程序中生命周期长的内存对象. Permanent:是指内存的永久保存区域,主要存放Class和Meta的 ...

  5. Java中ArrayList实现原理

    简述: ArrayList可以理解为动态数组,与Java中的数组相比,它的容量能动态增长.超出限制时会增加50%容量,用System.arraycopy()复制到新的数组中,因此最好能给出数组大小的预 ...

  6. Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally如何使用尽可能少的标注数据来训练一个效果有潜力的分类器

    作者:AI研习社链接:https://www.zhihu.com/question/57523080/answer/236301363来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  7. Linux Web服务器网站故障分析常用的命令

    系统连接状态篇: 1.查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ { ...

  8. 提高Java代码质量的Eclipse插件之Checkstyle的使用具体解释

    CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发者遵守某些编码规范的工具.它可以自己主动化代码规范检查过程.从而使得开发者从这项重要可是枯燥的任务中解脱出来. Ch ...

  9. Navi.Soft31.开发工具(含下载地址)

    1系统简介 1.1功能简述 在软件开发过程中,我们需要经常对字符串.文件.数据库操作.有时需要浏览Json格式串,有时需要浏览Xml格式串,有时需要读取txt或excel文件,有时需要对数据库访问.本 ...

  10. 关于socket的知识总结

    简单点说: 阻塞就是干不完不准回来,    非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用send函数发送一定的Byte,在系 ...