2016-04-27 72 views
0

我有一个控制器低于惩戒在控制器的服务具有依赖性customerService将返回基于listParam从服务器搜索result按性反应的类型

self.result = []; 
    self.listParam= {}; 

    self.search= function() { 
      self.result.length = 0; 
      self.findingPromise = customerService.find(self.listParam); 
      self.findingPromise 
       .then(function (response) { 
        self.result = response.data.Result; 
       }, function (response) { 
        var r = response; 
        ngNotify.set('Some problems occurred!', 
         { 
          type: 'error', 
          position: 'top', 
          sticky: true 
         }); 
       }); 
     }; 

我想用茉莉花单元测试。我已阅读Unit Testing for AngularJS文章。但我不明白我应该如何在这种情况下(搜索)使用模拟。如您所见,我可能已经根据服务后端解决了响应问题。

回答

1

可以使用间谍嘲笑你的服务,也许类似的东西会工作

spyOn(customerService, "find").and.callFake(function() { 
     return { 
     then:function(callback) { 
      var yourReturnObject = {}; 
      return callback(yourReturnObject); 
     } 
     }; 
    }); 

另外,你可以使用一个承诺,让您的服务工作或失败。

deferred = $q.defer(); 

spyOn(customerService, 'find').andReturn(deferred.promise); 

// here your asserts 


// In case that you want to make your service fail 
deferred.reject({ ... }); 

// In case that you want to make your service work 
deferred.resolve({ ... }); 
+0

您能否介绍一下它的工作原理?我无法理解这两种类型的响应是如何管理和伪造的。 – Elnaz

+0

你想测试什么?来自服务器的正确响应和来自服务器的失败响应? –

+0

不,我现在不想测试这项服务。我想测试控制器的操作。如果响应已成功从服务获得,它将设置html页面的结果,如果不是,则发送错误通知。但我不知道这些步骤。 – Elnaz