已修改为包含测试:
我有一个带有控制器的角度应用程序,如:
anuglar.module('myModule')
.controller('myController', ['$scope', 'myProvider',
function($scope, myprovider){
$scope.api = myProvider(objectName);
$scope.sites = $scope.api.list();
}]);
利用下面的提供商。
angular.module('myProviders')
.provider('myProvider', function(){
var url = 'http://localhost:3000/path/to/api';
this.$get = ['$http', function($http){
return function(){
return {
list: function(){
var list=[];
$http.get(url).success(function(data){
list = data;
});
return list;
}
}
};
}];
});
测试:
describe('cqsdbProvider', function () {
var mockCqsdbProvider, $httpBackend;
beforeEach(angular.mock.module('tgr1202App'));
beforeEach(function () {
angular.mock.inject(function($injector){
$httpBackend = $injector.get('$httpBackend');
mockCqsdbProvider = $injector.get('cqsdbProvider');
});
});
describe('list', function(){
it('should get a list of sites', inject(function(cqsdbProvider){
$httpBackend.expectGET('/path/to/api').
respond('[{"name":"Test1"}]');
var provider = mockCqsdbProvider();
var thing = provider.list();
$httpBackend.flush();
expect(thing.length).toEqual(1);
}));
});
});
此代码在浏览器中的行为与预期相同,但测试失败,表示事物长度为零。我知道成功没有完成,所以空数组正在返回,我只是不知道如何告诉我的模拟器等待响应。
答案 0 :(得分:2)
您的实施可能存在问题。你能试试吗
list: function(){
var list=[];
$http.get(url).success(function(data){
list.length = 0;
list.push(data);
});
return list;
}