如何调用$http请求
How to call $http request
我正在尝试制作 $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 调用在测试中实际上被调用了两次。一种是初始化控制器时(因为你正在调用 $scope.getData()
),第二种是当你在规范中手动调用 $scope.getData()
时。
并且您的期望仅被模拟一次(在控制器初始化之前)。要修复测试(模仿控制器 实际上 在做什么),必须在调用 $scope.getData()
之前再次设置期望。
查看插件:http://plnkr.co/edit/eLPOZTCgkSfoACLJsVZo?p=preview
或
您可以将 expectGET
替换为 whenGET
,如果未调用资源,则测试不会失败。但是由于您期望 expect($scope.data[0].name).toEqual('naveen')
其中 'naveen' 来自 http 响应,因此该更改应该没问题。
我正在尝试制作 $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 调用在测试中实际上被调用了两次。一种是初始化控制器时(因为你正在调用 $scope.getData()
),第二种是当你在规范中手动调用 $scope.getData()
时。
并且您的期望仅被模拟一次(在控制器初始化之前)。要修复测试(模仿控制器 实际上 在做什么),必须在调用 $scope.getData()
之前再次设置期望。
查看插件:http://plnkr.co/edit/eLPOZTCgkSfoACLJsVZo?p=preview
或
您可以将 expectGET
替换为 whenGET
,如果未调用资源,则测试不会失败。但是由于您期望 expect($scope.data[0].name).toEqual('naveen')
其中 'naveen' 来自 http 响应,因此该更改应该没问题。