【发布时间】:2014-10-11 12:12:52
【问题描述】:
是否可以立即解决 Angular Promise 并有效地让代码表现得像一个同步调用?我知道这违背了承诺的目的,但我想这样做是出于单元测试的目的。我的测试表明 then 被立即调用,但我不确定这里是否存在潜在的计时问题,then 仍被视为异步?
function someService(){
var deferred = $q.defer();
deferred.resolve(myObj);
return deferred.promise;
}
someService().then(function(obj){
//will this be executed right away just like it would if this was a synchronous call?
// more code here under test
});
var myVal = 10;
myVal 赋值会在 then 回调之前执行吗?或者我可以相信 then 总会马上过去吗?
【问题讨论】:
-
在我看来,通过修改单元测试和实际应用程序执行之间的代码执行路径,这打破了正确单元测试的概念。但是...不覆盖
then的 angular-promise 实现 -> 不,这将始终异步运行。 -
关键是要模拟服务并专注于测试然后而不用担心对服务的依赖。我通常会将逻辑分离到一个单独的可测试实体中,但不能在这里更改代码。
-
文档说无论承诺何时被解决或将被解决这意味着如果结果已经可用,那么“then”也应该立即被调用而无需任何时间或异步问题。
-
试试
scope.$digest()
标签: javascript angularjs angular-promise