{{1}}
为什么我们需要显式调用$ rootScope.apply()?
答案 0 :(得分:0)
在摘要周期中解析/拒绝承诺,您可以通过致电$rootScope.$apply()
甚至$rootScope.$digest
来触发承诺。
所以基本上通过调用你正在告诉angular处理你已经解决/拒绝的承诺的处理程序,以便评估测试结果。
当您的应用程序运行时,会自动评估摘要循环以查找在角度应用程序范围内发生的事情,因此在大多数情况下您无需直接在应用程序中调用它。
答案 1 :(得分:0)
因为那样测试会困难得多。我知道这可能听起来有点违反直觉,但是一旦你对承诺测试做了一点,你就会理解我的意思。
期望()来自承诺的东西会很痛苦,因为你总会遇到竞争条件。在您的示例中,如果省略$ apply(),由于promises的异步性质,可能会在promise被解析之前调用expect。
因此,通过手动获取$ apply / $ digest,它基本上将您的异步内容更改为同步。