Chúng tôi sử dụng nghiệp để kiểm tra các dịch vụ góc của chúng tôi, các dịch vụ này chứa $ http cuộc gọi, vì vậy chúng tôi có một $ httpbackend giả tại chỗ để chúng tôi có thể chạy các ứng dụng mà không cần máy chủ và db. hoạt động tốt, dịch vụ có thể gọi $ http ("someurl? Id = 1234") và chúng tôi lấy lại dữ liệu đúng.Angular 1.1.5 thử nghiệm dịch vụ dựa trên lời hứa
Nhưng khi chúng tôi cố gắng làm điều tương tự trong các thử nghiệm đơn vị, chúng tôi không thể có được nó để làm việc, lời hứa không bao giờ giải quyết, khi nó liên quan đến $ http
Các dịch vụ:
getAllowedTypes: function (contentId) {
var deferred = $q.defer();
$http.get(getChildContentTypesUrl(contentId))
.success(function (data, status, headers, config) {
deferred.resolve(data);
}).
error(function (data, status, headers, config) {
deferred.reject('Failed to retreive data for content id ' + contentId);
});
return deferred.promise;
}
Các $ chế giễu httpbackend
$httpBackend
.whenGET(mocksUtills.urlRegex('/someurl'))
.respond(returnAllowedChildren); //returns a json object and httpstatus:200
Bài kiểm tra
it('should return a allowed content type collection given a document id', function(){
var collection;
contentTypeResource.getAllowedTypes(1234).then(function(result){
collection = result;
});
$rootScope.$digest();
expect(collection.length).toBe(3);
});
nhưng bộ sưu tập không được xác định, .then() không bao giờ được gọi.
cố gắng khá nhiều tất cả mọi thứ để có được những lời hứa để giải quyết, $ rootScope. $ Apply(), $ tiêu hóa, $ httpBacke.flush(), nhưng không làm việc
Vì vậy, chế giễu $ httpBackend hoạt động khi gọi từ bộ điều khiển trong ứng dụng, nhưng không phải khi các dịch vụ được gọi trực tiếp trong các thử nghiệm đơn vị nghiệp vụ
Kees de Kooter đưa ra nhận xét trong một câu trả lời khác dưới đây rằng $ rootScope không bắt buộc. Tôi chia rẽ plunkr và nhận xét tất cả các tập quán $ rootScope. Bài kiểm tra vẫn trôi qua: http://plnkr.co/edit/4ladJi7TAQ4sFdzuGmDr?p=preview – chashi