为什么仅在对 $location 进行单元测试时必须包含 $route?
Why does $route have to be included when unit testing $location only?
我想编写一个单元测试来确认我的 "otherwise" 逻辑是否正常工作。这就是我期望的方式:
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?
我看到很多似乎相关的讨论:
您的测试不起作用的原因是 $route
执行重定向逻辑,并且 $route
未直接或间接从您的设置中实例化。 $route
只有在作为依赖项注入某处时才会实例化,例如 ng-view
指令。在真正的 Angular 设置中,您通常会配置 $routeProvider
并在页面的某处定义 ng-view
。如果 ng-view
不存在,那么 $route
真的不应该被实例化并执行会减慢应用程序速度的额外逻辑。 $route
和 ng-view
应该一起使用。
为了使它正常工作,您必须
- 在某处注入
$route
或
- 对具有
ng-view
的元素执行 $compile
。这一点很重要
在尝试错误位置之前实例化 $route
否则 $route
不知道重定向到 otherwise
位置。
我想编写一个单元测试来确认我的 "otherwise" 逻辑是否正常工作。这就是我期望的方式:
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?
我看到很多似乎相关的讨论:
您的测试不起作用的原因是 $route
执行重定向逻辑,并且 $route
未直接或间接从您的设置中实例化。 $route
只有在作为依赖项注入某处时才会实例化,例如 ng-view
指令。在真正的 Angular 设置中,您通常会配置 $routeProvider
并在页面的某处定义 ng-view
。如果 ng-view
不存在,那么 $route
真的不应该被实例化并执行会减慢应用程序速度的额外逻辑。 $route
和 ng-view
应该一起使用。
为了使它正常工作,您必须
- 在某处注入
$route
或 - 对具有
ng-view
的元素执行$compile
。这一点很重要 在尝试错误位置之前实例化$route
否则$route
不知道重定向到otherwise
位置。