使用Jasmine和Angular JS输入验证

时间:2013-06-25 13:26:43

标签: javascript validation angularjs jasmine

我有一个angularjs应用程序,它可以验证某些输入字段。我希望通过Jasmine编写单元测试来测试和维护这些字段的有效性。

注意:验证工作正常,只是使用茉莉,它似乎没有更新。 单元测试没有语法错误,只是导致:

Error: Expected false to equal true.
   at new jasmine.ExpectationResult
   at null.toEqual
   at null.<anonymous>
   at jasmine.Block.execute
   at jasmine.Queue.next_
   at chrome-extension

例如,我在指令中有:

}).directive('billingNumberPopup', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {

        scope.$watch(
                function() {
                    return ctrl.$viewValue;
                }, 
                function(value){
                    numValidation(value);
                }
            );
        function numValidation(viewValue){
            if (!viewValue || viewValue == "" ||  (!viewValue.toString().match(/[a-z]/gi) && viewValue.toString().match(/[0-9]/g).length == 6)){
                ctrl.$setValidity('billingNumber',true);
            }
            else
            {
                ctrl.$setValidity('billingNumber',false);                   
            }

然后从我的单元测试...

    it('Check if validation works', function(){
    var len = $scope.dataToPost.length;
    $scope.addRow();
    console.log("Hi");
    $scope.$apply(function(){
        $scope.dataToPost[len].billingNumber = "HELLO";});
    $scope.$apply();
    console.log($scope.dataToPost[len].billingNumber);
    console.log($("input[ng-model='d.billingNumber']"));    
    expect($("input[ng-model='d.billingNumber']")[len].classList.contains("ng-invalid")).toEqual(true);

});

其中“HELLO”不是有效的帐单编号,scope.dataToPost是绑定到输入字段的数据。我认为,更改值,调用$scope.$apply会触发验证,是否有任何建议?

1 个答案:

答案 0 :(得分:2)

jasmine错误表示您正在尝试访问空对象。

当您访问len而不是数组的len - 1索引时,似乎会发生这种情况。尝试将期望更改为:

expect($("input[ng-model='d.billingNumber']")[len - 1].classList.contains("ng-invalid")).toEqual(true);