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

gra*_*hez 8 javascript validation angularjs

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

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

我想测试这个,但看起来我必须$scope.contactForm手动创建这个并且存根$setPristine()函数.

有没有其他方法来测试它?我的意思是我可以以某种方式获得FormController我的测试中的底层实例吗?

你如何处理这种情况?

小智 1

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

像这样的东西:

document.getElementById("yourform").reset();
Run Code Online (Sandbox Code Playgroud)

或者,由于 angularJS 和 jQuery 运行良好,您可以使用 css 选择器(如果您想要一次清除多个表单,则特别有用。

所以像这样:

$("#yourform")[0].reset();
Run Code Online (Sandbox Code Playgroud)

还有纯 javascript 方法可以做到这一点: http://www.javascript-coder.com/javascript-form/javascript-reset-form.phtml

--- 所以总而言之,你不需要使用特定的方法来做到这一点,只需使用 DOM 方法、jQuery 或纯 javascript 即可。谷歌可能很快就会推出一种方法来做到这一点。希望这可以帮助。