今天用抹茶(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. css设置让a标签充满整个li

    首先贴一段html代码: <li id="sendText"><a href="#" title="发送文字">&l ...

  2. Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能

    引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. ...

  3. 3. CNN卷积网络-反向更新

    1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 1. 前言 如果读者详细的了解了DNN神经网络的反向更新,那对我们今天的学习会有很大的帮助.我们的CNN ...

  4. [转]oracle 11g jdbc jar包在哪个文件目录

    oracle 11g jdbc jar包在哪个文件目录 一. 如果装了Oracle数据库的话, 大致是这样的目录:     D:\oracle\product\11.2.0\client_1\oui\ ...

  5. python 入门练习

    1.猜拳游戏 import randomimport sys #from random import randintdef guess(): ubuntu = random.randint(0,2)# ...

  6. RabbitMQ文档翻译——Work queues

    原文链接:https://www.rabbitmq.com/tutorials/tutorial-two-java.html Work Queues (using the Java Client) I ...

  7. undefined reference to `clock_gettime'编译错误的解决办法

    解决办法如下

  8. .net类中静态方法的继承

    父类中的静态方法,继承的子类能不能调用?一直在这里有疑惑,即使在下面的测试之后,也只是得到了结论,不明原理. class ClsParent { public static void ShowSth( ...

  9. [转]Nginx的负载均衡方式

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  10. sqoop 常用命令整理(二)

    26.Validate 它用来比较源数据和目标数据的数量 它有三个接口 Validator. 它有三个接口 Validator. Property: validator Description: Dr ...