【发布时间】:2023-03-29 17:49:01
【问题描述】:
如何测试依赖于其他服务的服务。我目前在此实现中未找到 Service1Provider 错误。如何正确注入 Service1,以便对 Service2 进行单元测试?感谢您提供任何提示或技巧。
!function(ng){
'use strict';
var module = ng.module('foo.services', []);
(function($ng, $module) {
function Service($q) {
return {
bar: function(a,b,c){
var baz = a+b+c;
return function(d,e,f){
var deferred = $q.defer();
if(baz > 0){
deferred.resolve({result: baz + d + e + f });
} else {
deferred.reject({ err: 'baz was <= 0'})
}
return deferred.promise;
}
}
};
}
$module.factory("Service1", ['$q', Service]);
})(ng, module);
(function($ng, $module) {
function Service(Service1) {
function doSomething(){
var result;
var whatever = Service1.bar(5,6,7);
var promise = whatever(8,9,10);
promise.then(function(data){
result = data.result;
//data.result should be 45 here
}, function(err){
});
return result;
}
return {
bam:doSomething
};
}
$module.factory("Service2", ["Service1", Service]);
})(ng, module);
}(angular);
var myApp = angular.module('myApp',['foo.services']);
【问题讨论】:
-
Hcabnettek,我只能建议需要修改 Service2 以接受服务作为传递给
doSomething的参数,否则 Service2 对 Service1 的依赖对 Service2 来说是不可穿透的。如果您正在寻找可能出现问题的答案,则无法从doSomething直接返回result- 您需要返回promise。 -
其实修改需要稍微大一些。返回的promise需要考虑到链式
.then(),其回调应该返回data.result`(我认为)。
标签: unit-testing angularjs jasmine deferred