在我的节点应用程序中,我使用mocha来测试我的代码.在使用mocha调用许多异步函数时,我收到超时错误(Error: timeout of 2000ms exceeded.).我该如何解决这个问题?
var module = require('../lib/myModule');
var should = require('chai').should();
describe('Testing Module', function() {
it('Save Data', function(done) {
this.timeout(15000);
var data = {
a: 'aa',
b: 'bb'
};
module.save(data, function(err, res) {
should.not.exist(err);
done();
});
});
it('Get Data By Id', function(done) {
var id = "28ca9";
module.get(id, function(err, res) {
console.log(res);
should.not.exist(err);
done();
});
});
});
Run Code Online (Sandbox Code Playgroud) 正如您可能已经知道的那样,我们许多拥有大量书面单元测试的人已经遇到了这个非常简单的可解决问题.在AngularJs 单元测试指南之后,我有大约3500多个用Jasmine语法编写的单元测试.测试由Karma runner 执行.
问题是由于一些内存泄漏,它们无法一次性执行.在运行它们时,无论在哪个浏览器上运行,内存都会建立起来,并且在某些时候浏览器会崩溃并断开连接.我现在所知道的最好的解决方法是在社区中使用这个问题,在多次运行中拆分测试,最后通过合并单次运行的结果来获得正确的覆盖率.
当我第一次遇到这个问题时,我进行了大约1000次测试.在尝试使用所有可用的浏览器进行运行之后,我已经在多次运行中拆分了测试,但事实证明,这在很长一段时间内都不是很好的解决方法.现在测试是在14个以上并行运行的单次运行中执行的,以减少完成时间,而IMO仍然无法永久解决问题,但由于资源限制(RAM,CPU)和烦人的时间消耗而导致它延迟了.
有人可以争辩说我的代码中有内存泄漏,即使在浏览器中运行应用程序时我没有任何问题也无法保证.这就是我创建一个突出显示此问题的示例项目的原因.
为了重现这个问题,我正在创建一个Angular 服务,它的内存消耗很大,如下所示:
app.factory('heavyLoad', function () {
// init
var heavyList = [];
var heavyObject = {};
var heavyString = '';
// populate..
return {
getHeavyList: function () { return heavyList; },
getHeavyObject: function () { return heavyObject; },
getHeavyString: function () { return heavyString; }
};
});
Run Code Online (Sandbox Code Playgroud)
之后我有一个简单的指令,它使用这个服务来初始化许多DOM元素:
app.directive('heavyLoad', function (heavyLoad) {
return {
scope: {},
template: '' +
'<div>' +
' <h1>{{title}}</h1>' + …Run Code Online (Sandbox Code Playgroud) angularjs ×1
chai ×1
jasmine ×1
karma-runner ×1
memory-leaks ×1
mocha.js ×1
node.js ×1
unit-testing ×1