我发现自己处于一个小小的回调地狱,发现很难测试。 我希望也许你们中的一些人可以帮我解决这个问题
我有2个服务,问题在于fooService.getModel函数
app.service('fooService', function($q, barService){
return {
getModel: function(){
var deferred = $q.defer();
barService.get().then(function(response){
//my bareService mock allow me to reach up to this point
var result = {};
//some processing logic (if, else, etc)
console.log('resolve result') // I totally see this log
deferred.resolve(result); //this is what i want to test
});
return deferred.promise;
},
process: function(){
this.getModel().then(function(result){
if(result.success){
barService.post().then(function(){
//whatever i dont care
})
}
});
}
}
});
和barService包含2个方法(get和store)基本上是$ http调用 对于酒吧服务我没有测试问题,因为逻辑是孤立的 我只是伪造$ httpBackend调用,但有不同的反应。
我想在验证getModel函数返回的结果对象时发现的问题。
我的测试类似于
it('should test the returning model', inject(function(fooService){
barService.get.and.returnValue({then: function(successCallback){
successCallback({status:204, data: {}});
}});
var result;
fooService.getModel().then(function(response){
console.log('unit test then') // never gets in here
result = response;
});
//or anything related to the result object
expect(result).toEqual(mockedModel);
expect(result.success).toBeTruthy()
})
我所看到的是,如果我的getModel函数将自己执行http调用,我可以在单元测试中评估结果。
类似
getModel: function () {
var deferred = $q.defer();
$http.get(url).then(function (response) {
deferred.resolve(response);
})
.catch(function (response) {
deferred.reject(response);
});
return deferred.promise;
}
我绝对喜欢将我的barService的功能提取到我的fooService,但这很可能是为什么我提取到一个单独的服务。
您是否知道如何修复单元测试以评估结果响应?
我希望它清楚 感谢帮助人员
答案 0 :(得分:0)
Nevermind发现我甚至是服务,我需要在我的单元测试中做$ scope.digest。
谢谢!