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

Javascript 依赖于AngularJS中表单验证的单元测试控制器,javascript,validation,angularjs,Javascript,Validation,Angularjs,在我的控制器中,我只想在表单有效时调用一个操作(比如在Tab press上)。我还需要在表格成功提交后立即清除表格。我有类似的东西 app.controller('CommentFormController', function($scope) { $scope.submit = function() { if($scope.commentForm.$valid) { // submit form $scope.comment = ''; $sco

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

app.controller('CommentFormController', function($scope) {
  $scope.submit = function() {
    if($scope.commentForm.$valid) {
      // submit form
      $scope.comment = '';
      $scope.commentForm.$setPristine();
    }
  }
});
我想对此进行测试,但看起来我必须手动创建此
$scope.contactForm
,并删除
$setPristine()
函数

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


如何处理此类情况?

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

大概是这样的:

document.getElementById("yourform").reset();
或者,由于angularJS和jQuery很好地发挥作用,您可以使用css选择器(如果您想要同时清除多个表单,则特别有用)

比如:

$("#yourform")[0].reset();
还有一些纯javascript的方法可以做到这一点:


---总之,您不需要使用特定的方法来实现这一点,只需使用DOM方法、jQuery或纯javascript。Google可能很快就会想出一种方法来实现这一点。希望这能有所帮助。

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


我在上找到了一个解决方案。您可以尝试先注入$compile,然后注入$compile(yourFormTemplate)($scope).

如果我找到一个合适的方法来实现这一点,我会把它作为一个答案添加进来,但我在mo处也处于同样的情况,并且有一些想法。当加载模板时,即连接验证时,表单会自动绑定到范围。我们在这些单元测试中不会访问模板,这意味着我们应该进行e2e测试,而不是至少,如果你需要模拟你的后端,这会有点痛苦。团队也在为e2e测试切换到量角器,但这些测试对TDD不太友好。如果我取得任何进展,将进行更新。我也想知道最好的方法,因为目前我正在做:$scope.commentForm={$setPristine:function(){};是的,正如@daddywoodland所说,这似乎是缺少模板——它在指令中工作(因为您添加并$compiletheHTML)。。