我的应用程序中有一项使用$http
的服务,根据特定规范格式化请求。我一直在尝试对服务的方法进行单元测试,使用$httpBackend
来模拟响应。在测试使用$http
的控制器和指令时,我没有遇到任何麻烦,但是我的服务一直遇到困难。
我在第一个答案中一直遵循这个模式: AngularJS - Testing service method that uses $http service
即,向$httpBackend
注册预期请求,定义对它的响应,调用服务的感兴趣方法,然后刷新后端模拟。
除非我在调用我感兴趣的服务方法后注入$rootScope
,创建一个新范围并在其上运行$digest()
,否则我无法使其工作。这是我使用的测试控制器和使用$http
的指令的模式,因为测试运行器将指示没有待处理的待处理请求。但是,我并没有在服务中期望这个要求,因为scope
对我来说并不是很有意义。此外,上述链接问题的答案并未表明这是明确必要的。
今天早上在角度源中探索了相当长的时间之后,我确定已成功为我的服务的$http
请求创建了一个promise对象,但是在{{1}中注册了promise promise函数调用$q.when
永远不会开火。只有当我添加一行来消化我的servicesSpec中的范围对象时,一切都会激活....
这是一个已知问题吗?我使用的是v1.2.0rc2。是否存在解决范围对象中的测试服务的变通方法?
供参考,以下是功能规范代码:
nextTick()