Javascript 如何用茉莉花测试角度控制器?

Javascript 如何用茉莉花测试角度控制器?,javascript,angularjs,unit-testing,controller,jasmine,Javascript,Angularjs,Unit Testing,Controller,Jasmine,我是jasmine单元测试新手,正在尝试测试我的登录控制器 在控制器中,我有一个登录函数,该函数向servlet发出post请求,如下所示: $http({ method: 'POST', Url: loginSRV, Data: 'userEmail' + $scope.User.Email+ '&' +'userPassword'+$scope.User.Password, DataType:'text', Headers:{'Content-Type': .....} }). s

我是jasmine单元测试新手,正在尝试测试我的登录控制器

在控制器中,我有一个登录函数,该函数向servlet发出post请求,如下所示:

$http({ 
method: 'POST',
Url: loginSRV,
Data: 'userEmail' + $scope.User.Email+ '&' +'userPassword'+$scope.User.Password,
DataType:'text',
Headers:{'Content-Type': .....}
}).
success(function(data, status) {
$scope.status = status;
$scope.data=data; 
.
.
//doing something
.
.
}).
error(function(data, status){
.
.
//do something
.
.
});
describe('login test', function(){

beforeEach(module ('app'));

var scope;
var loginCTRL;

beforeEach(inject(function($controller, $rootScope){
scope = $rootScope.$new();

createComtroller=function(){
return $controller('loginCTRL', {'$scope': scope
});
};
loginCTRL=createController();

}));

//Checking if the comtroller defined and some other tests

it("login", inject(function($controller){
scope.User = {};
scope.User.Password="1234";
scope.User.Email="a@b.c";

scope.Login();

expect(scope.data).toContain('success');
}));
.
.
.
});
我的测试是这样的:

$http({ 
method: 'POST',
Url: loginSRV,
Data: 'userEmail' + $scope.User.Email+ '&' +'userPassword'+$scope.User.Password,
DataType:'text',
Headers:{'Content-Type': .....}
}).
success(function(data, status) {
$scope.status = status;
$scope.data=data; 
.
.
//doing something
.
.
}).
error(function(data, status){
.
.
//do something
.
.
});
describe('login test', function(){

beforeEach(module ('app'));

var scope;
var loginCTRL;

beforeEach(inject(function($controller, $rootScope){
scope = $rootScope.$new();

createComtroller=function(){
return $controller('loginCTRL', {'$scope': scope
});
};
loginCTRL=createController();

}));

//Checking if the comtroller defined and some other tests

it("login", inject(function($controller){
scope.User = {};
scope.User.Password="1234";
scope.User.Email="a@b.c";

scope.Login();

expect(scope.data).toContain('success');
}));
.
.
.
});
现在,当我进入scope.login()并进行调试时,似乎会跳过$http部分,而不会进入成功或错误部分。 我开始明白我必须模拟http响应,但我不知道如何去做,我试图避免它,但无法使我的测试工作


有什么办法可以测试这个控制器吗?

http调用会给你一个承诺,看看如何用jasmine-hint在angular中模拟承诺,在测试中使用$q为什么我需要使用$q?我考虑过使用$httpBackend,但无法让它正常工作