После долгих чтений кажется, что рекомендуется использовать веб-службу от контроллера AngularJS, чтобы использовать фабрику и вернуть обещание от этого.
Здесь у меня простая фабрика, которая вызывает образец API.
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');
}));
ошибка, что я получаю при запуске это карма бегуна, является
TypeError: «не определено» не является объектом (оценка «scope.peopleList.one»)
Как я могу получить этот тест, работая с моими издеваемыми данными?
Я читал об этом, но мой контроллер не берет $ http. Можете ли вы рассказать о том, что вы имеете в виду? – Mendhak