【发布时间】:2015-11-05 04:29:51
【问题描述】:
如何使用模拟的 Angular 和经过一段时间解决的 Promise 运行测试?
更简单地说:下面的测试永远不会运行
var injector = angular.injector(['ngMock']);
var scope = injector.get('$rootScope').$new();
var q = injector.get('$q');
var promise = function() {
return q(function(resolve, reject) {
setTimeout(function() {
resolve();
}, 500);
});
};
promise()
.then(function() {
document.getElementById('result').innerHTML = 'TEST RUN';
});
//resolve the promises
scope.$digest();
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular-mocks.js"></script>
<p id="result">starting test...</p>
【问题讨论】:
-
您是否需要让超时实际运行 500 毫秒(或者它可以只是 1 毫秒 1000000 毫秒?),或者只是从超时评估,并让承诺解决?
-
超时只是一个例子,实际上使用$timeout而不是setTimeout可以轻松解决。关键是,每当异步使用 $q 时,除非您知道何时调用 scope.$digest(); 否则您无法对其进行测试。这并不总是事先知道的。
-
你为什么要用 Angular 测试非 Angular 代码?
标签: javascript angularjs unit-testing promise angular-promise