AngularJS服务单元测试报错:$urlMatcherFactoryProvider未知问题求助
解决AngularJS服务单元测试中$urlMatcherFactoryProvider未知的问题
嘿,我一眼就看出问题出在哪了——你遇到的[$injector:unpr]错误,本质是测试环境里缺少了$urlMatcherFactory所属的模块依赖!
错误原因
$urlMatcherFactory这个服务并不属于ngResource模块:它是AngularJS官方的ngRoute模块(原生路由)或者第三方的ui.router模块(UI-Router)提供的核心服务。而你在测试里创建exampleApp模块时,只声明了ngResource作为依赖,Angular的注入器根本找不到$urlMatcherFactory的提供者,自然就报错了。
修复步骤
1. 导入对应模块的脚本
首先要确保测试环境里已经加载了包含$urlMatcherFactory的脚本:
- 如果用的是AngularJS原生路由:在测试的脚本引入列表里加上
angular-route.js(和angular-mocks.js、angular-resource.js放在一起) - 如果用的是UI-Router:引入
angular-ui-router.js
2. 更新测试模块的依赖
修改测试代码里创建模块的部分,把对应的路由模块添加到依赖数组里:
如果用原生ngRoute:
beforeEach(() => { angular .module('exampleApp', ['ngResource', 'ngRoute']) // 新增ngRoute依赖 .service(ExampleService.selector, ExampleService); angular.mock.module('exampleApp'); });
如果用UI-Router:
beforeEach(() => { angular .module('exampleApp', ['ngResource', 'ui.router']) // 新增ui.router依赖 .service(ExampleService.selector, ExampleService); angular.mock.module('exampleApp'); });
3. 重新运行测试
现在Karma的注入器就能找到$urlMatcherFactory的提供者了,这个错误应该就消失啦。
小提示
别忘了,测试模块的依赖要和你实际应用中这个服务所属模块的依赖保持一致——这样测试环境才能模拟生产环境的依赖结构,避免出现这类依赖缺失的问题。
内容的提问来源于stack exchange,提问作者John Singh
相关产品推荐
相关产品推荐

