根据响应类型模拟控制器中的服务

时间:2016-04-27 08:45:51

标签: angularjs unit-testing mocking jasmine

我有一个如下控制器,它依赖于customerService,它将从服务器返回基于result的搜索listParam

  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
                        });
                });
        };

我想将 Jasmine 用于单元测试。我看过Unit Testing for AngularJS文章。但我不明白在这种情况下我应该如何使用 mocking (搜索)。如您所见,我可能已根据服务后端解决了响应。

1 个答案:

答案 0 :(得分: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({ ... });