我有一个调用2个http网址的服务函数,然后一旦解析了这两个网址,就会在服务中设置一些数据。
E.g。
function dataServicesCall() {
var start = moment(dateDataModel.date).format('YYYYMMDD');
var end = moment(dateDataModel.date).format('YYYYMMDD');
var promises = [
DataService.getClients(),
DataService.getProjects(start, end)
];
$q.all(promises)
.then(function (response) {
console.log(' a ');
setItems(response[1]);
})
.catch(handleError);
}
我在单元测试中所做的是模拟两个DataServices调用并尝试模拟响应。
fit('should get the data for the current day upon starting up', function() {
var spy = spyOn(DataService, 'getProjects').and.callFake(function () {
console.log(' == hi ');
var deferred = $q.defer();
deferred.resolve([]);
return deferred.promise;
});
var spy1 = spyOn(DataService, 'getClients').and.callFake(function () {
console.log(' hi ');
var deferred = $q.defer();
deferred.resolve([]);
return deferred.promise;
});
myService.dataServicesCall();
expect(spy).toHaveBeenCalled(); //ok
expect(spy1).toHaveBeenCalled(); //ok
expect(mService.items).toEqual([]); //not ok
});
问题是我的服务中从不调用$ q.all,并且从不调用setItems函数。我不知道如何完成这个单元测试。