大佬教程收集整理的这篇文章主要介绍了node.js – 测试同步代码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
function funcA() { return new Promise(function(resolve,reject) { Sync(function () { return funcB.sync(); },function (err,result) { if(err) { reject(err); } else { resolve(result); } }); }
此代码使用mocha chai进行测试:
it("should return array",function() { return funcA().then(function(result) { expect(result).to.be.an.instanceof(Array); }); });
几个月前它工作得很好,但现在这个测试总是超时:
到目前为止我尝试过的:
>使用done()而不是返回一个promise
>用synchronize.js替换node-sync
>增加超时
我发现的是,期望(…这个测试的一部分实际上是被调用的,但只有在mocha杀死测试之后.无论当前设置了什么超时间隔,期望(…总是被调用〜我收到错误:超时消息后20毫秒.
我通过在测试文件的顶部添加seTinterval(function(){},10)来解决此问题.我想知道为什么这有效,如果有更好的方法来解决这个问题?
[编辑]看起来这是一个特定于节点版本的问题.测试在0.12.4上失败,但在0.10.38上正确运行.
所以当我以这种方式创建funcB时:
function funcB() { return [1,2,3]; }
但是如果我在asynchronus函数中转换funcB如下:
function funcB(cb) { process.nextTick(function () { cb(null,[1,3]); }); }@H_631_5@mocha运行测试没有任何问题:
所以我的完整代码运行正常(funcB评论是导致错误的代码)是这样的:
// install dependencies // npm install promise // npm install sync var Promise = require('promise'); var assert = require('assert'); var Sync = require('sync'); function funcA() { return new Promise(function (resolve,result) { if (err) { reject(err); } else { resolve(result); } }); }); } // function funcB() { // return [1,3]; // } function funcB(cb) { process.nextTick(function () { cb(null,3]); }); } it("should return an array",function(donE) { return funcA().then( function (result) { console.log(result); assert.equal(Array.isArray(result),truE); done(); } ); });
所以我认为我认为同步库创建的sync method(在同步函数上使用它)的误用是造成这个问题的原因.
以上是大佬教程为你收集整理的node.js – 测试同步代码全部内容,希望文章能够帮你解决node.js – 测试同步代码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。