角度服务测试承诺

时间:2016-07-13 03:52:59

标签: angularjs unit-testing service

我发现自己处于一个小小的回调地狱,发现很难测试。 我希望也许你们中的一些人可以帮我解决这个问题

我有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,但这很可能是为什么我提取到一个单独的服务。

您是否知道如何修复单元测试以评估结果响应?

我希望它清楚 感谢帮助人员

1 个答案:

答案 0 :(得分:0)

Nevermind发现我甚至是服务,我需要在我的单元测试中做$ scope.digest。

谢谢!

相关问题