我正在绞尽脑汁地试图找出我错过了什么,经过 5 个小时的谷歌搜索后,我并没有更接近答案,所以这是我的最后一次尝试。
我有一个 AngularJS 应用程序,在其中一个单元测试中,我正在检查 Controller 在 api 调用后是否显示一些数据。我的问题是我的 Controller 上有一个 watch 正在运行一些日期验证,它破坏了我的测试。如果我取下 watch ,测试就会顺利通过。我从测试中得到的错误如下:
Result Message: TypeError: 'undefined' is not a function (evaluating '$scope.filterOrdersForm.txtDateFrom.$setValidity('txtDateFromValid', true)')
这是我的 watch 正在调用的代码:
$scope.checkSearchCriteriaDateValidity = function() {
var dateFrom = moment($scope.searchCriteria.dateFrom);
var dateTo = moment($scope.searchCriteria.dateTo);
// check each date for validity
if (dateFrom.isValid() !== true) {
$scope.filterOrdersForm.txtDateFrom.$setValidity('txtDateFromValid', false);
} else {
$scope.filterOrdersForm.txtDateFrom.$setValidity('txtDateFromValid', true);
}
if (dateTo.isValid() !== true) {
$scope.filterOrdersForm.txtDateTo.$setValidity('txtDateToValid', false);
} else {
$scope.filterOrdersForm.txtDateTo.$setValidity('txtDateToValid', true);
}
// check if both are valid and if so make sure from date is before to date
if (dateFrom.isValid() && dateTo.isValid()) {
if (dateFrom.isAfter(dateTo)) {
$scope.filterOrdersForm.txtDateFrom.$setValidity('fromBeforeTo', false);
} else {
$scope.filterOrdersForm.txtDateFrom.$setValidity('fromBeforeTo', true);
}
}
};
有人可以指出我缺少什么吗?我是否需要对测试做一些特殊的事情来处理这种情况?任何帮助将不胜感激。
最佳答案
希望我的回答对您有帮助。问题是 $setvalidity
是一个在通过 jasmine 脚本执行您的方法时未定义的方法。为了解决这个问题,您必须在调用相应的方法之前创建一个模拟方法来设置有效性。
请在其方法中尝试以下代码,
$scope.filterOrdersForm = {txtDateFrom : {$setValidity: function (var1,var2){ return true }}};
Spyon( $scope.filterOrdersForm.txtDateFrom,"$setValidity");
关于javascript - 在 watch 破坏测试中使用 Jasmine 形式有效性进行 AngularJS 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26485286/