在 angularJS 中对服务进行单元测试
Unit testing a service in angularJS
我对单元测试比较陌生,但现在的任务是为我熟悉的现有代码库编写测试ui。
遗憾的是,我无法取得任何进展,也找不到真正有用的文档。
代码库的主要组件是从 api 检索数据的服务,但我无法获取该服务所属模块的实例:
TypeError: module is not a function in /home/faebser/workspace/GridSense-CMS-App/dev/test/unit/api.test.js (line 13)
业力配置:http://sprunge.us/ObSP?js
业力输出:http://sprunge.us/WYHI?bash
问题是什么?为什么我无法获取模块的实例?
更新1:
我设法通过重新安装相同版本的 angular 和 angular 模拟来加载我的模块。但是现在我 运行 进入以下错误:
minErr/<@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:63:12
loadModules/<@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4138:15
forEach@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:323:11
loadModules@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4099:5
createInjector@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4025:11
workFn@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular-mocks/angular-mocks.js:2425:44
我设法追踪到以下错误:
"[$injector:modulerr] Failed to instantiate module ui.router due to:[$injector:nomod] Module 'ui.router' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.http://errors.angularjs.org/1.3.15/$injector/nomod?p0=ui.routerminErr/<@http://localhost:9876/base/bower_components/angular/angular.js:63:12module/<@http://localhost:9876/base/bower_components/angular/angular.js:1774:1ensure@http://localhost:9876/base/bower_components/angular/angular.js:1698:38module@http://localhost:9876/base/bower_components/angular/angular.js:1772:1loadModules/<@http://localhost:9876/base/bower_components/angular/angular.js:4115:22forEach@http://localhost:9876/base/bower_components/angular/angular.js:323:11loadModules@http://localhost:9876/base/bower_components/angular/angular.js:4099:5loadModules/<@http://localhost:9876/base/bower_components/angular/angular.js:4116:40forEach@http://localho"
好吧,只是忘了在 karma-config 中添加 ui-router。
看起来 angular-mock 没有加载。
检查好你的路径。目前,对于业力它看起来像:
-dev
|-test/
|-js/
|-bower_components/
|-karma.conf
因为在 karma.conf 中,您有:
base: '',
好的,我设法让它工作了。
主要问题是 angular 给我的奇怪错误消息:
minErr/<@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:63:12
loadModules/<@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4138:15
forEach@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:323:11
loadModules@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4099:5
createInjector@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4025:11
workFn@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular-mocks/angular-mocks.js:2425:44
为了解决这个问题,我使用了业力调试 window 并在函数 minErr(module, ErrorConstructor):
中的 angular.js:63 处设置了一个断点
return new ErrorConstructor(message);
这样你就可以看到参数和编译后的错误信息。最后我只是忘了在 karma 配置文件中添加一些依赖项。
我对单元测试比较陌生,但现在的任务是为我熟悉的现有代码库编写测试ui。
遗憾的是,我无法取得任何进展,也找不到真正有用的文档。
代码库的主要组件是从 api 检索数据的服务,但我无法获取该服务所属模块的实例:
TypeError: module is not a function in /home/faebser/workspace/GridSense-CMS-App/dev/test/unit/api.test.js (line 13)
业力配置:http://sprunge.us/ObSP?js
业力输出:http://sprunge.us/WYHI?bash
问题是什么?为什么我无法获取模块的实例?
更新1:
我设法通过重新安装相同版本的 angular 和 angular 模拟来加载我的模块。但是现在我 运行 进入以下错误:
minErr/<@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:63:12
loadModules/<@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4138:15
forEach@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:323:11
loadModules@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4099:5
createInjector@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4025:11
workFn@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular-mocks/angular-mocks.js:2425:44
我设法追踪到以下错误:
"[$injector:modulerr] Failed to instantiate module ui.router due to:[$injector:nomod] Module 'ui.router' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.http://errors.angularjs.org/1.3.15/$injector/nomod?p0=ui.routerminErr/<@http://localhost:9876/base/bower_components/angular/angular.js:63:12module/<@http://localhost:9876/base/bower_components/angular/angular.js:1774:1ensure@http://localhost:9876/base/bower_components/angular/angular.js:1698:38module@http://localhost:9876/base/bower_components/angular/angular.js:1772:1loadModules/<@http://localhost:9876/base/bower_components/angular/angular.js:4115:22forEach@http://localhost:9876/base/bower_components/angular/angular.js:323:11loadModules@http://localhost:9876/base/bower_components/angular/angular.js:4099:5loadModules/<@http://localhost:9876/base/bower_components/angular/angular.js:4116:40forEach@http://localho"
好吧,只是忘了在 karma-config 中添加 ui-router。
看起来 angular-mock 没有加载。
检查好你的路径。目前,对于业力它看起来像:
-dev
|-test/
|-js/
|-bower_components/
|-karma.conf
因为在 karma.conf 中,您有:
base: '',
好的,我设法让它工作了。 主要问题是 angular 给我的奇怪错误消息:
minErr/<@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:63:12
loadModules/<@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4138:15
forEach@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:323:11
loadModules@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4099:5
createInjector@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular/angular.js:4025:11
workFn@/home/faebser/workspace/GridSense-CMS-App/dev/bower_components/angular-mocks/angular-mocks.js:2425:44
为了解决这个问题,我使用了业力调试 window 并在函数 minErr(module, ErrorConstructor):
中的 angular.js:63 处设置了一个断点return new ErrorConstructor(message);
这样你就可以看到参数和编译后的错误信息。最后我只是忘了在 karma 配置文件中添加一些依赖项。