正如您可能已经知道的那样,我们许多拥有大量书面单元测试的人已经遇到了这个非常简单的可解决问题.在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) 我的webapp正在谈论的API有时会超载,如果它无法处理请求,则发送500内部服务器错误.
我的Web应用程序可以发送100多个不同的请求,因此如果我单独执行重试,则会花费数小时的打字时间.
我已经在使用$ httpProvider拦截器,这里是(简化)
$httpProvider.interceptors.push(function ($q) {
return {
responseError: function (response) {
switch (response.status) {
case 401 :
window.location = "/";
alert('Session has expired. Redirecting to login page');
break;
case 500 :
// TODO: retry the request
break;
}
return $q.reject(response);
}
};
});
Run Code Online (Sandbox Code Playgroud)
从服务器获取500响应代码后,如何重新发送请求?
我正在现有项目中使用angular-cli 1.0.4,我想将版本更新为1.2.4.卸载旧版本并使用npm更新到较新版本并影响我现有项目的最佳方法是什么?它会更新package.json文件的版本.
angularjs ×2
angular ×1
angular-cli ×1
jasmine ×1
karma-runner ×1
memory-leaks ×1
migration ×1
unit-testing ×1
upgrade ×1