为什么仅在单元测试$location时必须包含$route
Why does $route have to be included when unit testing $location only?
我想写一个单元测试来确认我的"否则"逻辑是否正常工作。这就是我所期望的:
it('should handle unknown routes properly', inject(function($location, $rootScope) {
$location.path('/unknown');
$rootScope.$digest();
expect($location.path()).toBe('/yikes');
}));
然而,我发现我必须注入$route才能使这个测试工作。请记住,单元测试代码不必使用$route,但显然需要实例化它才能使$location正常工作。
如果你对更多细节感兴趣,这里有一个plunker。为什么仅在单元测试$location时必须包含$route?
我看到了很多似乎相关的讨论:
- 第1213期
- 相关承诺
测试不起作用的原因是$route
执行重定向逻辑,而$route
不是直接或间接从您的设置中实例化的。只有当$route
作为依赖项注入到某个地方(例如ng-view
指令)时,它才会被实例化。在实际的Angular设置中,您通常会在页面的某个位置配置$routeProvider
并定义ng-view
。如果不存在ng-view
,那么$route
真的不应该被实例化并执行额外的逻辑来减慢应用程序的速度。CCD_ 9和CCD_。
为了让这个工作,你必须要么
- 将
$route
注入某处或 - 对具有
ng-view
的元素执行$compile
。这很重要在尝试坏位置之前实例化$route
否则CCD_ 15将不知道重定向到CCD_
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 货币代码为欧元-金额的格式不应包含小数
- 如何包含特定于每个视图angularjs的javascript文件
- 我如何修复包含在captcha的addthis中的错误
- 正在注入包含JS的HTML
- Json数据包含日期和时间格式
- Angular js-返回一个包含类似
- jQuery/JS包含运算符或类似运算符
- 如果href包含X,请更改href
- JavaScript数组包含一个值
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 在Meteor项目中安装并包含npm模块后出错
- 传递包含'%的参数'在URL中
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- 如何首先设置样式<td>表中包含在窗体中的元素
- 每天用javascript包含不同的php文件
- AngularJs-$route.current到底包含什么
- 为什么仅在单元测试$location时必须包含$route
- 类似route的嵌套文件夹(包含斜杠)
- 在使用了ngRoute并且包含了angular-route.js的情况下,也没有定义routeProvider