Я пытаюсь сделать демонстрацию запроса $ http и проверить эту услугу. Мне это нравится
.controller('cntrl',function($scope,appfactory,$http){
$scope.data=[];
appfactory.setValue('test abc');
$scope.getData=function(){
$http.get('data.json').success(function(data){
console.log(JSON.stringify(data))
$scope.data=data;
}).error(function(data){
console.log(JSON.stringify(data))
})
}
$scope.getData();
$scope.toggle=function(){
if(appfactory.mode()=='a'){
$scope.message='naveen'
}else {
if(appfactory.mode()=='b'){
$scope.message='parveen'
}
}
}
})
Я загружаю эти данные из json файла и отображаю его на вид. Но когда я пытаюсь проверить это приложение.. У меня возникла ошибка? как удалить эту ошибку
beforeEach(inject(function($rootScope,$controller,appfactory,_$httpBackend_) {
$scope = $rootScope.$new();
$httpBackend=_$httpBackend_;
createController = function() {
return $controller('cntrl', {'$scope' : $scope });
};
}));
it("tracks that the spy was called", function() {
var response=[{"name":"naveen"},{"name":"parveen"}]
$httpBackend.expectGET('data.json').respond(response);
var controller = createController();
$scope.getData();
$httpBackend.flush();
expect($scope.data[0].name).toEqual('naveen')
});
})
вот мой код http://plnkr.co/edit/zdfYdtWbnQz22nEbl6V8?p=preview
http-вызов для получения данных эффективно получает вызов дважды в тесте. Один из них - когда инициализируется контроллер (потому что вы вызываете $scope.getData()
), а второй - когда вы вручную вызываете $scope.getData()
в спецификации.
И ваше ожидание только издевается один раз (до инициализации контроллера). Чтобы исправить тест (чтобы имитировать то, что на самом деле выполняет контроллер), ожидание должно быть задано еще раз перед $scope.getData()
.
См. Plunker: http://plnkr.co/edit/eLPOZTCgkSfoACLJsVZo?p=preview
ИЛИ
Вы можете заменить expectGET
на whenGET
который не завершит проверку, если ресурс не вызван. НО, так как вы ожидаете expect($scope.data[0].name).toEqual('naveen')
где 'naveen' происходит от http respose, это изменение должно быть прекрасным.
whenGET
в этом коде.