单元测试控制器依赖于AngularJS中的表单验证

时间:2013-10-03 10:18:30

标签: javascript validation angularjs

在我的控制器中,我只想在表单有效时调用一个动作(比如在Tab按下)。我还需要在表单成功提交后立即清除表单。我有类似的东西

app.controller('CommentFormController', function($scope) {
  $scope.submit = function() {
    if($scope.commentForm.$valid) {
      // submit form
      $scope.comment = '';
      $scope.commentForm.$setPristine();
    }
  }
});

我想对此进行测试,但看起来我必须手动创建此$scope.contactForm并删除$setPristine()函数。

还有其他方法可以测试吗?我的意思是我可以以某种方式在我的测试中获得基础FormController的实例吗?

你如何处理这类案件?

2 个答案:

答案 0 :(得分:1)

将表单设置为pristine将影响表单的状态,但不会将表单重置为默认值(如果您已提供)。相反,您可以使用DOM元素方法reset()。

这样的事情:

document.getElementById("yourform").reset();

或者,由于angularJS和jQuery很好地使用,你可以使用css选择器(如果你想要一次清除多个表单,这将非常有用。

类似于:

$("#yourform")[0].reset();

还有纯粹的javascript方法: http://www.javascript-coder.com/javascript-form/javascript-reset-form.phtml

---总而言之,您不需要使用特定的方法来执行此操作,只需使用DOM方法,jQuery或纯javascript。谷歌很可能会尽快推出这样的方法。希望这会有所帮助。

答案 1 :(得分:0)

@grafthez我尝试通过$ scope.myForm验证表单在我的控制器中是否有效时遇到同样的问题。$ valid。

我在https://stackoverflow.com/a/17129354找到了一个解决方案。你可以尝试注入$ compile然后$ compile(yourFormTemplate)($ scope)。