我拉着我的头发试图弄清楚我失踪了什么,经过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);
}
}
};
有些人可以指出我错过了什么。我是否必须对我的测试做一些特殊处理以解决这种情况?任何帮助将不胜感激。
答案 0 :(得分:-1)
我希望我的回答对你有所帮助。问题是$setvalidity
是一个在jasmine脚本执行方法时未定义的方法。为了解决这个问题,你必须在调用相应的方法之前为set有效性创建一个mock方法。
请尝试以下代码方法,
$scope.filterOrdersForm = {txtDateFrom : {$setValidity: function (var1,var2){ return true }}};
Spyon( $scope.filterOrdersForm.txtDateFrom,"$setValidity");