mocha 测试 mysql_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);

});

});

});

上述代码执行结果如下:只是超时引起的错误。

4passing (5s)1failing1) DbFactory DbFactory functions query tables should return more than 0rows:

Error: timeout of 5000ms exceeded

atnull. (/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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值