为什么在单元测试中不会自动调用消化周期的承诺?

时间:2015-09-03 10:51:48

标签: angularjs

{{1}}

为什么我们需要显式调用$ rootScope.apply()?

2 个答案:

答案 0 :(得分:0)

在摘要周期中解析/拒绝承诺,您可以通过致电$rootScope.$apply()甚至$rootScope.$digest来触发承诺。

所以基本上通过调用你正在告诉angular处理你已经解决/拒绝的承诺的处理程序,以便评估测试结果。

当您的应用程序运行时,会自动评估摘要循环以查找在角度应用程序范围内发生的事情,因此在大多数情况下您无需直接在应用程序中调用它。

答案 1 :(得分:0)

因为那样测试会困难得多。我知道这可能听起来有点违反直觉,但是一旦你对承诺测试做了一点,你就会理解我的意思。

期望()来自承诺的东西会很痛苦,因为你总会遇到竞争条件。在您的示例中,如果省略$ apply(),由于promises的异步性质,可能会在promise被解析之前调用expect。

因此,通过手动获取$ apply / $ digest,它基本上将您的异步内容更改为同步。