在角度单元测试中将form设置为$valid

setting form to $valid in angular unit test

本文关键字:设置 valid form 单元测试      更新时间:2024-03-08

我有一个指令,要测试设置为属性的表单验证。

    restrict: 'A',
    scope: true, 

表单名称由元素属性提供

 $scope.theFormName = elem.attr('name');

我需要进入if语句

if ($scope.theForm.$valid) {

我以前的内部每个单元测试我都有

html = angular.element("<div ha-form-validation name='"name'" class='"ng-invalid'"></div>");
    $rootScope = $rootScope.$new();
    element = $compile(html)($rootScope);
    $rootScope.$digest(element);
    scope = element.scope();
    scope.name = {
        name: "test",
    };

我已尝试在我的测试中将表格设置为有效

    var form = scope.theFormName.$setValidity("properties", true);

但是FormName正在返回未定义的

 scope.theFormName.$valid  = undefined

有没有办法将其设置为有效?

这里有几个问题:

  1. 正在编译的元素(html)中没有可设置为有效的form元素。

  2. 在编译html之前,您应该尝试向$scope添加属性,如下所示:

    var scope = $rootScope.$new();
    scope.name = {
        name: "test"
    };
    element = $compile(html)(scope);
    scope.$digest();
    
  3. 我不确定你的指令到底是什么样子的,但如果你试图访问包含它的form,那么你可以使用:

    require: '^form',
    link: function(scope, element, attrs, formCtrl)
    

    父窗体上的角度FormController将作为第四个参数(formCtrl)注入link,而不必将窗体的名称作为元素上的属性传入。

此外,如果您正在尝试使用ha-form-validation进行某种自定义验证,这可能会有所帮助。