我的控制器具有类似下面的代码:
$q.all([qService.getData($scope.id), dService.getData(), qTService.get()])
.then(function (allData) {
$scope.data1 = allData[0];
$scope.data2 = allData[1];
$scope.data3 = allData[2];
});
而在我的单元测试我正在做这样的事情:
beforeEach(inject(function($rootScope, $q, $location){// and other dependencies...
qServiceSpy = spyOn(_qService, 'getData').andCallFake(function () {
var data1 = {
id: 1,
sellingProperty: 1,
};
var d = $q.defer();
d.resolve(data1);
return d.promise;
});
dServiceSpy = spyOn(_dService, 'getData').andCallFake(function () {
var data2 = [{ "id": "1", "anotherProp": 123 }];
var d = $q.defer();
d.resolve(data2);
return d.promise;
});
qTServiceSpy = spyOn(_qTService, 'get').andCallFake(function () {
var data3 = [{ id: 0, name: 'Rahul' }];
var d = $q.defer();
d.resolve(data3);
return d.promise;
});
rootScope = $rootScope;
});
现在,在我的测试我检查,如果服务被称为与数据1,数据2不是不确定的..
it('check if qService' got called, function() {
expect(scope.data1).toBeUndefined();
rootScope.$digest();
expect(_quoteService.getQuote).toHaveBeenCalled();
});
it('check if "data1" is defined', function () {
expect(scope.data1).toBeUndefined();
rootScope.$digest();
expect(scope.data1).toBeDefined();
});
我的问题是,这是工作的罚款,直到我取代与q.all控制器和测试我的个人服务呼叫scope.$apply
与rootScope.$digest
。 随着q.all和rootScope.$digest
(尝试使用scope.$apply
为好)这两个测试失败,错误:
10 $摘要()迭代达到。 中止!
如果我删除rootScope.$digest
则承诺永远不会得到解析和测试失败说
预期未定义被定义。
任何帮助我应该如何单元测试代码q.all
?
碰上了这个职位
但是,这也于事无补,因为我已经尝试使用$digest
。