繁体   English   中英

手表破坏测试中具有茉莉花形式有效性的AngularJS单元测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM