बहुत पढ़ने के बाद, ऐसा लगता है कि एंगुलरजेएस नियंत्रक से वेब सेवा को कॉल करने का अनुशंसित तरीका कारखाने का उपयोग करना और उससे वादा करना है।
यहां मेरे पास एक साधारण कारखाना है जो नमूना एपीआई कहता है।
myApp.factory('MyFactory', ['$http',function($http) {
var people = {
requestPeople: function(x) {
var url = 'js/test.json';
return $http.get(url);
}
};
return people;
}]);
और यह मैं इसे कैसे नियंत्रक
myApp.controller('MyCtrl1', ['$scope', 'MyFactory', function ($scope, MyFactory) {
MyFactory.requestPeople(22).then(function(result) {
$scope.peopleList = result;
});
}]);
हालांकि यह ठीक काम करता है, मैं result
कि जब then
कहा जाता है में पारित हो जाता है नकली करने में सक्षम होना चाहते हैं में कहते हैं। क्या यह संभव है?
मेरे प्रयास ने अब तक कुछ भी नहीं बनाया है।
//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');
}));
त्रुटि है कि मैं जब कर्म धावक में यह चल रहा हो,
लेखन त्रुटि है: 'अनिर्धारित' एक वस्तु नहीं है ('scope.peopleList.one' का मूल्यांकन)
यह मेरा प्रयास हैमैं इस परीक्षण को अपने मॉक किए गए डेटा के साथ कैसे काम कर सकता हूं?
मैंने इसके बारे में पढ़ा है, लेकिन मेरा नियंत्रक $ http नहीं लेता है। क्या आप इसका मतलब बता सकते हैं? – Mendhak