Tôi đang sử dụng hoa nhài để kiểm tra đơn vị một bộ điều khiển angularjs mà bộ biến trên phạm vi để kết quả của cách gọi một phương pháp dịch vụ mà trả về một đối tượng lời hứa:Angularjs lời hứa không được giải quyết trong kiểm tra đơn vị
var MyController = function($scope, service) {
$scope.myVar = service.getStuff();
}
bên trong dịch vụ:
function getStuff() {
return $http.get('api/stuff').then(function (httpResult) {
return httpResult.data;
});
}
Điều này làm việc tốt trong bối cảnh ứng dụng góc cạnh của tôi, nhưng không hoạt động trong thử nghiệm đơn vị hoa nhài. Tôi đã xác nhận rằng "sau đó" gọi lại là thực hiện trong thử nghiệm đơn vị, nhưng $ scope.myVar lời hứa không bao giờ được thiết lập để giá trị trả về của cuộc gọi lại.
kiểm tra đơn vị của tôi:
describe('My Controller', function() {
var scope;
var serviceMock;
var controller;
var httpBackend;
beforeEach(inject(function ($rootScope, $controller, $httpBackend, $http) {
scope = $rootScope.$new();
httpBackend = $httpBackend;
serviceMock = {
stuffArray: [{
FirstName: "Robby"
}],
getStuff: function() {
return $http.get('api/stuff').then(function (httpResult) {
return httpResult.data;
});
}
};
$httpBackend.whenGET('api/stuff').respond(serviceMock.stuffArray);
controller = $controller(MyController, {
$scope: scope,
service: serviceMock
});
}));
it('should set myVar to the resolved promise value',
function() {
httpBackend.flush();
scope.$root.$digest();
expect(scope.myVar[0].FirstName).toEqual("Robby");
});
});
Ngoài ra, nếu tôi thay đổi bộ điều khiển như sau bài kiểm tra đơn vị đi:
var MyController = function($scope, service) {
service.getStuff().then(function(result) {
$scope.myVar = result;
});
}
Tại sao lời hứa gọi lại giá trị kết quả không được tuyên truyền đến $ phạm vi .myVar trong bài kiểm tra đơn vị? Xem jsfiddle sau để biết mã hoạt động đầy đủ http://jsfiddle.net/s7PGg/5/
câu trả lời tuyệt vời, tôi dường như đã bị mất rằng bit trong các tài liệu. – robbymurphy
Nếu bạn đang chế nhạo phần đầu sau như tôi, kết quả sẽ là một tổng hợp với thuộc tính "dữ liệu" giữ nội dung phản hồi thực tế. – Gepsens
Trong Angular 1.2, lời hứa không còn được giải quyết tự động (AKA, unwrapped). – zhon