我想写一个单元测试来确认我的“其他”逻辑是否正常工作。这就是我期望的方式:
it('should handle unknown routes properly', inject(function($location, $rootScope) {
$location.path('/unknown');
$rootScope.$digest();
expect($location.path()).toBe('/yikes');
}));
但是,我发现我必须注入$ route来进行测试。请记住,单元测试代码不必使用$ route,但显然需要实例化以使$ location正常工作。
如果您对更多细节感兴趣,请参阅plunkr。为什么只在单元测试$ location时必须包含$ route?
我看到许多似乎有关的讨论:
答案 0 :(得分:3)
您的测试不起作用的原因是$route
执行重定向逻辑,$route
未直接或间接地从您的设置实例化。 $route
只有在某个地方作为依赖项注入时才会被实例化,例如ng-view
指令。在真正的Angular设置中,您通常会在页面的某处配置$routeProvider
并定义ng-view
。如果不存在ng-view
,则$route
实际上不应该被实例化并执行额外的逻辑来减慢应用程序的速度。 $route
和ng-view
旨在一起使用。
为了实现这一目标,您必须
$route
或$compile
的元素执行ng-view
。这一点很重要
在尝试错误的位置之前$route
进行实例化
或者$route
无法知道重定向到otherwise
位置。