[英]AngularJS unit testing with jasmine form validity in a watch breaking tests
我正在拔头发试图找出我所缺少的东西,经过5个小时的谷歌搜索之后,我离答案越来越近了,所以这是我的最后一枪。
我有一个AngularJS应用,在一项单元测试中,我正在检查控制器是否在api调用后显示了一些数据。 我的问题是我在该控制器上有一块手表,该手表正在运行一些日期验证,并且正在破坏我的测试。 如果我卸下手表,则测试可以顺利通过。 我从测试中得到的错误如下:
Result Message: TypeError: 'undefined' is not a function (evaluating '$scope.filterOrdersForm.txtDateFrom.$setValidity('txtDateFromValid', true)')
这是我的手表正在调用的代码:
$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
是用茉莉花脚本执行您的方法时未定义的方法。 为了解决这个问题,您必须在调用相应方法之前创建一个模拟方法来设置有效性。
请尝试以下代码中的it方法,
$scope.filterOrdersForm = {txtDateFrom : {$setValidity: function (var1,var2){ return true }}};
Spyon( $scope.filterOrdersForm.txtDateFrom,"$setValidity");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.