2

我有一个 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会触发验证,有什么建议吗?

4

1 回答 1

2

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

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

expect($("input[ng-model='d.billingNumber']")[len - 1].classList.contains("ng-invalid")).toEqual(true);
于 2014-07-07T04:46:50.140 回答