2

当您为表单命名时,会为您创建 ngFormController。

<form name="accountForm">将创建 $scope.accountForm 这允许您执行以下操作$scope.accountForm.$setPristine()

但是,在我的控制器中,测试accountForm是未定义的,因为我认为它是在解析模板后创建的,而且我不确定在测试控制器时是否考虑过模板。我怎样才能在测试中模拟这个?

4

1 回答 1

2

我刚遇到同样的问题。我最终做的是使用 sinon.stub 制作一个假的表单对象。该对象具有以下属性:

form = {$valid: true, $pristine: false, $dirty: true, $setPristine: function () {scope.newItemForm.$dirty = false, scope.newItemForm.$pristine = true;}};

然后我将那个假设置为等于我的范围的 newItemForm。

scope.newItemForm = form;

然后我测试了行为是否正确,scope.newItemForm.$dirty = false and scope.newItemForm.$pristine = true何时$setPristine触发以及何时不应该触发。

这并没有模拟 的所有行为$setPristine,但我想我只需要知道该方法是否被触发,因为我不应该担心测试 angular 的功能。

于 2014-02-05T17:19:03.287 回答