当前位置: 首页 > 面试题库 >

在角度形式指令的单元测试中为输入字段设置视图值

曹凯泽
2023-03-14
问题内容

我有一个指令来建立一个表格:

app.directive('config', function() {
  return {
    restrict: 'E',
    scope: {
      data: '='
    },
    template: '<form name="configForm">' +
      '<input type="number" max="10" ng-model="config.item" name="configItem"/>' +
      '<div class="form-error" ng-show="configForm.$error.max">Error</div>' + 
      '</form>',
    controller: 'ConfigDirectiveController',
  };
});

我要做的是通过单元测试来验证,如果有一些输入,错误消息将显示出来。使用angular 1.2,我可以修改$
scope.config.item,它将更新视图值并显示错误。

据我所知,在角度为1.3的情况下,如果模型未通过验证,则视图值不会得到更新…所以我需要修改视图值以确保显示错误消息。

如何获得对“ configItem”输入的访问权限,以便可以设置视图值以确保显示错误消息?

编辑以显示单元测试

我看到该值设置正确,但是错误仍然将ng-hide应用于标签。当我查看页面并手动更改输入值时,如果我输入的值大于10,则ng-hide将被删除并且将显示错误。

  beforeEach(inject(function($compile, $rootScope) {
      element = angular.element('<config data="myData"></config>');
      $scope = $rootScope.$new();
      $scope.myData = {};
      element = $compile(element)($scope);
    }));

    it('should warn that we have a large number', function() {
      var input = element.find('[name="configItem"]')[0];
      $scope.$apply(function() {
        angular.element(input).val('9000000001');
      });
      errors = element.find('[class="form-error ng-binding"]');
      expect(errors.length).toBe(1);
    })

问题答案:

这是我对基于输入的指令进行单元测试的方式(为清晰起见,省略了很多代码!)您要遵循的重要内容是:

angular.element(dirElementInput).val('Some text').trigger('input');

这是完整的单元测试:

  it('Should show a red cross when invalid', function () {

    dirElement = angular.element('<ng-form name="dummyForm"><my-text-entry ng-model="name"></my-text-entry></ng-form>');

    compile(dirElement)(scope);
    scope.$digest();

    // Find the input control: 
    var dirElementInput = dirElement.find('input');

    // Set some text!
    angular.element(dirElementInput).val('Some text').trigger('input');
    scope.$apply();

    // Check the outcome is what you expect! (in my case, that a specific class has been applied)
    expect(dirElementInput.hasClass('ng-valid')).toEqual(true);
  });


 类似资料:
  • 当在输入字段中按下enter键时,我使用这个答案中的指令来运行一个函数。 如何传递输入字段到指令调用的函数?或者将输入字段元素传递给函数,以在检索后清除值。 HTML JS公司

  • 我正在处理登录表单,如果用户输入无效凭据,我们希望将电子邮件和密码字段标记为无效,并显示登录失败的消息。我如何去设置这些字段从可观察到的回调无效? 模板: 登录方式: 除了将inputs invalid(输入无效)标志设置为true之外,我还尝试将标志设置为false,并将设置为true。所有这些都不会导致输入显示其无效状态。

  • 问题内容: 我必须为IE8写一些代码。我有一个ng-repeat创建一个充满以下内容的表: IE8不会输入type = number 我想要一个指令,该指令将忽略该输入字段上不是数字键的击键....即.... 0-9 我不想让用户键入abc并污染模型,然后告诉他们该值无效。我宁愿不要让他们输入任何无效的数据。 问题答案: HTML: 指示: 柱塞 另请参见input中有关ng-model的过滤器。

  • 问题内容: 如何在指令中设置插值?我可以从以下代码中读取正确的值,但无法设置它。 js: HTML: 我的控制器范围内的值在哪里? 问题答案: 如果要在范围上设置值,但不知道属性名称(提前),则可以使用以下语法: 如果属性中的字符串包含点(例如),则将无法使用;您可以用来做作业: 如果使用隔离范围,则可以使用批注: 您可以在此Angular /jQuery颜色选择器JSFiddle示例中看到一个示

  • 我有课。 有没有什么方法可以在单元测试中不使用Spring就将值插入到私有字段模式(用Resource注释)。我尝试使用通过反射设置私有变量,但这也没有帮助(可能是由于安全限制)。

  • 我有一个高图表图形http://jsfiddle.net/jerryvermanen/XRjyc/,但我想添加一个输入字段。输入字段要求一年。输入后: > 图形应在输入年份的基础上增加一年(因此1992年变为1993年) 图形应在输入年份1显示一条垂直绘图线(因此在1993年显示一条线) 它还应该在五年之后(1998年)和五年之后(2003年)添加一行,以此类推 还应计算这些年份(1993年、19