我正在尝试为http.get()请求编写jasmine测试,这些请求是作为我的控制器实例化的一部分而生成的:
e.g
angular.module('dashboard').controller('DashboardCtrl', ['$scope', '$rootScope', '$http', function($scope, $rootScope, $http) {
$scope.module_names = [
[0, 'WorkforceMap', null, null],
[10, 'Engagement SentiMap', 'Sentiment', 'engagement'],
[11, 'Change SentiMap', 'Sentiment', 'change'],
];
$http.get('api/info', {cache: true}).success(function(data) {
$rootScope.dash_info = data;
var comp = $rootScope.components = [];
for(var i = 0; i < scope.module_names.length; i++) {
var mod = scope.module_names[i];
if(mod[0] in data.modules)
comp.push([mod[1], mod[3]]);
else
del_module(mod[2], mod[3]);
}
});
$http.get('api/population_data', {cache: true}).success(function(data) {
$rootScope.population_data = data;
});
还有一些http请求。
我试图使用httpBackend为第一次api通话编写单元测试&#39; api / info&#39;并且一直在努力。
describe("DashboardCtrl Tests", function(){
beforeEach(module('dashboard'));
var scope;
var $httpBackend;
var controller;
beforeEach(inject(function(_$controller_, _$httpBackend_, $rootScope, $injector){
scope = $rootScope.$new();
controller = _$controller_('DashboardCtrl', {$scope: scope});
$httpBackend = _$httpBackend_;
$httpBackend.expectGET('/api/info').respond({'short': 'hi'});
}));
describe('$http.get(api/info)', function(){
it(' receives data from dashboard/:profile_id/api/info', function(){
$httpBackend.expectGET('api/info');
$httpBackend.flush();
});
});
});
我认为我一直在努力的原因是我无法找到如何挑出一个http.get请求,因为所有请求都是在实例化控制器时执行的。
我最近的错误是&#34; ReferenceError:无法找到变量:scope&#34;
我一直在四处寻找,但如果有人之前见过这样的话,我会非常感谢一些指导!
由于
答案 0 :(得分:0)
在这种情况下我做的是隔离调用方法,你至少可以在$ scope.init函数中包装所有这些并测试它。
更好的方法是在较小的函数上削减它,并且最好的方法是在这些较小的函数中返回$ http promise的服务。
init的例子:
angular.module('dashboard').controller('DashboardCtrl', ['$scope', '$rootScope', '$http', function($scope, $rootScope, $http) {
$scope.init = function (){
$scope.module_names = [
[0, 'WorkforceMap', null, null],
[10, 'Engagement SentiMap', 'Sentiment', 'engagement'],
[11, 'Change SentiMap', 'Sentiment', 'change'],
];
$scope.info();
$http.get('api/population_data', {cache: true}).success(function(data) {
$rootScope.population_data = data;
});
};
$scope.info = function (){
$http.get('api/info', {cache: true}).success(function(data) {
$rootScope.dash_info = data;
var comp = $rootScope.components = [];
for(var i = 0; i < scope.module_names.length; i++) {
var mod = scope.module_names[i];
if(mod[0] in data.modules)
comp.push([mod[1], mod[3]]);
else
del_module(mod[2], mod[3]);
}
});
};
$scope.init();
在测试中:
describe('$http.get(api/info)', function(){
it(' receives data from dashboard/:profile_id/api/info', function(){
$httpBackend.expectGET('api/info').respond({'title':'test'});
scope.info();
$httpBackend.flush();
$rootScope.$digest();
expect($rootScope.dash_info).toEqual({'title':'test'});
});
});