Sau nhiều lần đọc, có vẻ như cách được đề nghị để gọi một dịch vụ web từ một bộ điều khiển AngularJS là sử dụng một nhà máy và trả lời một lời hứa từ đó.
Ở đây tôi có một nhà máy đơn giản gọi API mẫu.
myApp.factory('MyFactory', ['$http',function($http) {
var people = {
requestPeople: function(x) {
var url = 'js/test.json';
return $http.get(url);
}
};
return people;
}]);
Và đây là cách tôi gọi nó trong bộ điều khiển
myApp.controller('MyCtrl1', ['$scope', 'MyFactory', function ($scope, MyFactory) {
MyFactory.requestPeople(22).then(function(result) {
$scope.peopleList = result;
});
}]);
Trong khi nó hoạt động tốt, tôi muốn để có thể thử các result
được thông qua trong khi then
được gọi. Điều này có thể không?
Nỗ lực của tôi cho đến nay chưa tạo ra gì cả. Đây là nỗ lực của tôi:
//Fake service
var mockService = {
requestPeople: function() {
return {
then: function() {
return {"one":"three"};
}
}
}
};
//Some setup
beforeEach(module('myApp.controllers'));
var ctrl, scope;
beforeEach(inject(function ($rootScope, $controller) {
scope = $rootScope.$new();
ctrl = $controller('MyCtrl1', { $scope: scope, MyFactory: mockService });
}));
//Test
it('Event Types Empty should default to false', inject(function() {
expect(scope.peopleList.one).toBe('three');
}));
Các lỗi mà tôi nhận được khi chạy này ở Á hậu nghiệp, là
Lỗi Loại: 'undefined' không được một đối tượng (đánh giá 'scope.peopleList.one')
Làm cách nào để thử nghiệm này hoạt động với dữ liệu giả mạo của tôi?
Tôi đã đọc về nó, nhưng bộ điều khiển của tôi không mất $ http. Bạn có thể giải thích về ý của bạn không? – Mendhak