Angular:模拟数据服务

时间:2015-11-22 16:29:49

标签: angularjs unit-testing chai

我是第一次进行单元测试,我正在尝试研究如何从服务模拟数据调用,以便测试数据是否以正确的形式返回:

我的服务

angular.module('app.core')
   .factory('PeopleService', PeopleService)

  function PeopleService($http, $q, $filter) {

    var endpoint;
    var service = {
      customers: {
        value: null
      },
      getAllCustomers: getAllCustomers,
    };

    return service;

    function getCustomers(endpoint_) {
      endpoint = endpoint_;
      service.customers.value = [];

      return handleFetch($http.get(endpoint));
    }

    function handleFetch(promise) {
      return promise.then(function (resp) {
        service.customers.value = service.customers.value.concat(resp.data.data);
      });
    }

    function getAllCustomers() {
      return $q.all([
        getCustomers('/api/customers'),
      ]).then(function(responses) {
        return responses[0];
      });
    }
  }

我的控制器

angular.module('app.people')
    .controller('peopleCtrl', peopleCtrl);

function peopleCtrl($scope, PeopleService) {
    $scope.customers = PeopleService.customers;

    getCustomers();

    function getCustomers() {
      return PeopleService.getAllCustomers().then(function () {
        return PeopleService.customers.value;
      });
    }
}

我的测试

describe('People Service', function () {
    var controller;
    var customers = mockData.getMockCustomers(); // my fake customers array

    beforeEach(function() {
      bard.appModule('app');
      bard.inject('$controller', '$q', '$rootScope', 'PeopleService');

      var ps = {
        getAllCustomers: function() {
          return $q.when(customers);
        }
      };

      controller = $controller('peopleCtrl', {
        $scope: $rootScope,
        PeopleService: ps
      });
    });

    it('should return an array of 5 customers', function() {
      $rootScope.$apply();
      expect($rootScope.customers).to.have.length(5);
    });
});

我设置了一个控制器,当加载与People Service的对话并获取我的客户并将客户数量保存到PeopleService.customers.value时。在我的控制器中,我有一个等于$scope.customers的变量PeopleService.customers

我正试图用我的测试来模拟这个,没有点击API,我正在使用一些模拟数据来做这个(一组5个客户),但不确定我是否理解正确。

让我的模拟人员服务确切地返回真正的人员服务返回的想法是什么?我现在有点困惑。我基本上希望该测试检查模拟数据长度是否等于5。

对此有任何帮助表示赞赏。提前谢谢!

0 个答案:

没有答案