Javascript 如何用茉莉花测试角度控制器?
我是jasmine单元测试新手,正在尝试测试我的登录控制器 在控制器中,我有一个登录函数,该函数向servlet发出post请求,如下所示: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
$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,但无法让它正常工作