AngularJS:测试是否有类的函数

时间:2015-07-28 20:52:33

标签: javascript angularjs jasmine

在表单上提交尝试在控制器中运行函数以检查匹配的密码以及电子邮件字段是否包含类。

Scenerios:

如果密码不匹配则无法

如果电子邮件包含ng-invalid,则表示无法

密码验证就好了,问题是试图查看电子邮件字段是否在表单提交后包含一个类。

在jQuery中会写:

if($(#email).hasClass('ng-invalid'){//email is invalid man return false;}

但是在Angular中没有使用jQuery。在vanilla JS中尝试了几种方法来查看#email是否具有类'ng-invalid'但它不起作用。 JavaScript Check If Element Has Class

最终结果是在Jasmine单元测试中使用函数“formValidate()”来验证formValidate()是true还是false。

基本实施:

PLUNKER

Jasmine(这应该失败):

it('Join Now button should be enabled when form fields are valid.',          

function(){ 
  var ctrl = createController();
  $httpBackend.flush();
  var joinNowBtn = registrationEl.find('.join-now-btn');

$rootScope.user = {
  'email': 'hola@friend.c',
  'password': 'abc',
  'passwordConfirm': 'abc'
};

expect($rootScope.formValidate()).toBeTruthy(); //THIS TEST SHOULD FAIL

//expect submit button to not have a disabled attribute
});

3 个答案:

答案 0 :(得分:3)

您不需要检查ng-invalid课程。只需检查$scope.registration_form.email.$invalidtrue还是false

$scope.user.email.$invalid无法正常工作,因为$scope.user.email只是一个字符串。

表单验证信息放入$scope.formName。您可以使用以下内容:

$scope.formName.$invalid === true
$scope.formName.fieldName.$invalid === true

检查NgModelController docs

答案 1 :(得分:0)

您可以使用hasClass()

Angular本身可以访问jqLit​​e的var unixtime = new Date(timestamp).getTime() / 1000;

http://docs.angularjs.org/api/angular.element

答案 2 :(得分:0)

你不应该像jQuery一样检查类。您可以通过将表单传递到提交函数并检查email.$invalid是真还是假来检查表单输入的有效性。所以像这样:

<强> HTML

ng-submit="submitForm(this.registration_form)"

js功能

$scope.formValidate = function(form){
    if(form.email.$invalid){
      alert('email is invaid')
      return;
    }
    // etc.
}