我是第一次进行单元测试,我正在尝试研究如何从服务模拟数据调用,以便测试数据是否以正确的形式返回:
我的服务
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。
对此有任何帮助表示赞赏。提前谢谢!