【问题标题】:Angular $q.reject not resolving [duplicate]Angular $q.reject 无法解决 [重复]
【发布时间】:2016-03-11 16:38:40
【问题描述】:

我在 jasmine 测试中有一个非常简单的函数,我只是返回 $q.reject

var mockFunction = function() {
                return $q.reject("error");
        };

我称之为:

mockFunction().catch(function(){
// ... blah
});

从不调用 catch 回调函数。如果我理解正确 $q.resolve 应该创建一个承诺,立即拒绝并返回被拒绝的承诺,所以我不确定为什么这不起作用

感谢任何见解。谢谢!

【问题讨论】:

  • 你在写测试吗?承诺解决/拒绝与角度摘要循环相关联,因此在测试中经常需要添加$rootScope.$apply() 调用。
  • 你是对的,愚蠢的我。谢谢

标签: javascript angularjs jasmine promise


【解决方案1】:

$q 承诺链不会在规范中自动执行,它应该是

mockFunction().catch(function(){
// ... blah
});
$rootScope.$digest();

要启动它,在这种情况下,链将同步执行。

【讨论】:

  • 我不确定它是否有任何真正的区别,但 FWIW docs 使用 $rootScope.$apply() 而不是 $digest
  • $digest 或 $apply 是语义问题。在生产中,人们可能总是想使用 $apply,最好使用表达式参数,它本质上是在 $digest 周围设置了保护措施。 $rootScope.$digest() 在规范中被广泛用于触发根范围的摘要,在那里显式使用它没有危险。
猜你喜欢
  • 2013-02-15
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 2014-08-18
  • 2019-11-18
  • 2018-11-26
相关资源
最近更新 更多