Javascript Angularjs-如何进行单元测试表单验证
我用它来单元测试我的Angular应用程序。如何在控制器中测试表单验证?例如,我有一个登录功能:Javascript Angularjs-如何进行单元测试表单验证,javascript,angularjs,jasmine,Javascript,Angularjs,Jasmine,我用它来单元测试我的Angular应用程序。如何在控制器中测试表单验证?例如,我有一个登录功能: $scope.login = function() { if($scope.form_login.$valid) { //send request with username and password }; }; 我正在尝试将$valid设置为true,但无法访问此处的表单。我收到一个错误TypeError:无法设置未定义的属性“$valid”: it('should
$scope.login = function() {
if($scope.form_login.$valid) {
//send request with username and password
};
};
我正在尝试将$valid
设置为true
,但无法访问此处的表单。我收到一个错误TypeError:无法设置未定义的属性“$valid”:
it('should not send request if form validation fails', function() {
$controller('loginController', {$scope: $scope});
$scope.form_login.$valid = true;
$scope.login();
})
单元测试不应该真正测试表单。要测试表单和其他与控制器无关的内容,请使用e2e测试
但是,如果您确实想在单元测试中测试验证,请参阅或如果您使用服务保存数据
$scope.login = function() {
if($scope.form_login.$valid) {
//send request with username and password
MyService.login();
};
};
检查您的服务是否未被调用,并将$scope.form_login.$valid属性模拟为false
var MyService, controllerInjector, rootScope;
beforeEach(inject(function($controller, _MyService_, $rootScope){
controllerInjector = $controller;
MyService = _MyService_;
rootScope = $rootScope;
}))
it('should not send request if form validation fails', function() {
var scope, controller;
scope = rootScope.$new();
scope.form_login = {
$valid : false;
}
var loginController = controllerInjector('loginController', {
$scope : scope
});
spyOn(MyService,'login');
scope.login();
expect(MyService.login).not.toHaveBeenCalled();
});
回答正确,将尽可能多的代码逻辑从视图移到控制器中,并使用单元测试测试控制器代码,使用量角器e2e测试表单testing@danday74如果使用服务登录,我可能会在单元测试方法中测试没有调用该方法的服务,而且,我可以使用e2e量角器进行集成测试