我有一个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
会触发验证,是否有任何建议?
答案 0 :(得分:2)
jasmine错误表示您正在尝试访问空对象。
当您访问len
而不是数组的len - 1
索引时,似乎会发生这种情况。尝试将期望更改为:
expect($("input[ng-model='d.billingNumber']")[len - 1].classList.contains("ng-invalid")).toEqual(true);