【发布时间】:2017-06-13 07:13:16
【问题描述】:
我正在尝试使用 jasmine/karma 为 Angular 服务编写单元测试。我有一个类似的服务测试,效果很好。但是这个有一些额外的依赖,在不同的模块中,只是没有找到注入的服务。
服务看起来像这样。 bService 在同一个模块中,但 commonFactory 和 commonService 在另一个模块中,比如 commonModule。
(function () {
'use strict';
angular
.module('myService')
.service('aService', aService);
aService.$inject = [
'commonFactory',
'commonService'
'bService'
];
function aService (
commonFactory,
commonService,
bService
) {
};
return {
codeIWantToTest: CodeIWantToTest;
}
function CodeIWantToTest () {
console.log('surprise!');
}
})();
我的茉莉花测试看起来像:
describe('myService.aService', function () {
'use strict';
var aService;
// I tried adding beforeEach(module('commonModule')); too, but that didn't do anything
beforeEach(module('myService'));
beforeEach(function() {
inject(function(_aService_) {
console.log('getting aService');
aService = _aService_;
});
});
it('tests my service is defined', function() {
expect(myService).toBeDefined();
});
});
此测试失败。 myService 未定义,并且注入函数中的 console.log 永远不会触发。我的karma.conf.js 基本上按照它们被注入服务的顺序列出了依赖项,然后添加服务然后测试。
什么会导致注入无法获取服务?我错过了什么?我提到我对commonService 进行了类似的测试,它工作得很好。所以我很困惑。
【问题讨论】:
-
您通常不会测试服务,而是在控制器中测试服务的结果。
-
已编辑代码,在
bService上添加了缺少的'。万一这不是复制到 SO 的问题。 -
它也缺少
aService =_aService_末尾的_。 -
@MatthewGreen 您通常不会像这样测试它们吗?这是否意味着它不起作用?我需要在更高的层次上做吗?
-
@MatthewGreen 你是从哪里得到这个的?实际上恰恰相反;在单元测试中,您单独测试单独的单元,因此活动部件较少,红色测试明确指示哪个单元失败。因此名称为单元测试。
标签: angularjs unit-testing jasmine karma-runner