在 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/AJWL?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 配置文件中添加一些依赖项。